使用Object.value()

时间:2018-01-18 04:09:21

标签: javascript arrays

我尝试在不使用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]

1 个答案:

答案 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]