Array.prototype.splice方法重写
在JavaScript的数组操作API中,Array.prototype.splice是一个很强大的方法。
假如要你来重写一个这样的方法,该如何考虑呢?
先来看一下,这个方法的原型。
Array.prototype.splice(from, count, insertItems...)
这个方法接收两个或更多的参数,它拥有如下的性质:
1.from参数是一个大于等于0的正整数,它决定了从哪个索引开始对数组进行操作
2.count参数也是一个大于等于0的正整数,它表示从from索引开始要移除多少个元素
3.insertItems代表任意项要被插入from位置的元素
4.该方法应该返回一个数组,该数组包含所有被移除的元素,若没有元素被移除,则返回空数组
根据这些性质,我们可以划分为2个基本业务:
1.删除操作,如果count>=0,那么就执行该操作。
2.新增操作,如果insertItems至少有一项,那么就执行该操作。
写成下面的代码实现:
Array.prototype.splice = function (from, count) { //存放移除的数组元素 var del = []; if(count >= 0){ //如果没有足够的元素可供删除 //就删除从from开始的所有元素 if(count > this.length - from){ count = this.length - from; } //要被删除的最后一个元素索引 var end = from + count - 1; //从后往前删 for(var i=end;i>=from;i--){ del.unshift(this[i]); //移位 for(var j=i;j<this.length-1;j++){ this[j] = this[j+1]; } //长度-1并且将最后一个元素舍弃 this.length--; } } //获取要添加的项 var toAdd = Array.prototype.slice.call(arguments,2); //从后往前添加 for(var i=toAdd.length-1;i>=0;i--){ //为新元素移开位置 for(var j=this.length-1;j>=from;j--){ this[j+1] = this[j]; } //将新元素插入指定的位置 this[from] = toAdd[i]; } return del; };
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Keil的代码优化产生的问题
- 下一篇: JavaScript数组splice方法