第 158 题:如何模拟实现 Array.prototype.splice
splice()
方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。参考:https://www.wenjiangs.com/wiki/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
写了一个TS的,编译了下
有几点需要注意的:
1、第一个参数,开始下标
2、第二个参数,删除个数
3、从第三个开始往后都是插入的数据
4、操作的都是原数组,也就是改变的是原数组
5、返回一个被删除的数据的新数组
下边这个是我老早之前写的,参考了 chrome 的实现方式
/***
*/
最短代码数
前端的原始API还有没写的吗?
Array.prototype.mySplice = function (start, count, ...args) {
const len = this.length
let _start = start
let res = []
let thisArr = []
function setThis(that, arr) {
arr.forEach((v, index) =>that[index] = v)
that.length = arr.length
}
if (start < 0) {
_start = len + start
_start = _start < 0 ? 0 : _start
}
if (start > len) {
_start = len
}
if (count === undefined) {
res = this.slice(_start)
setThis(this, this.slice(0, _start))
return res
}
res = this.slice(_start, _start + count)
const left = this.slice(0, _start)
const right = this.slice(_start + count)
setThis(this, left.concat(args, right))
return res
}