我尝试在不使用Array.prototype.splice()
function splice(array, start, deleteCount) {
var returnArray = [];
while(deleteCount != 0) {
returnArray[returnArray.length] = array[start];
delete array[start];
array = Object.values(array);
deleteCount--;
}
console.log(array) // [1,2]
return returnArray;
}
var array = [1,2,3,4]
splice(array,2,2);
console.log(array); // [1, 2, empty, 4]; -> wrong
Object.values()
似乎有问题,但我无法解释。有人可以给我一个答案,为什么外面的数组没有显示[1, 2]
?
答案 0 :(得分:0)
使用splice(array,2,2)
将数组传递到切片时,它会传递外部数组变量所指向的对象。现在,array
函数中的splice
参数指向同一个对象。但是,您的代码array = Object.values(array);
会创建一个新对象并分配给您的array
参数。现在,您的array
参数不再指向与外部array
完全相同的对象。如果您之前执行console.log
,则会注意到array
的值为[1, 2, empty, 4]
。在此之后,由于array
参数与该对象失去联系,因此保留了该值。
为了更好地理解,请试用此代码:
first = [1,2,3,4]
next = Object.values(first);
console.log(next); // [1,2,3,4]
next[2] = 9;
console.log(next); // [1,2,9,4]
console.log(first); // still [1,2,3,4]