创建新数组而不影响旧数组的值

新手上路,请多包涵

我正在尝试创建现有数组的副本,并在不影响原始数组的情况下从数组副本中删除一些项目。我试过这个:

 var new_arr = old_arr; //when I remove from new array the items from old array are also removed

如何创建现有阵列的全新副本?

更新 :

当我这样做时:

 var new_arr = old_arr.slice();

然后:

 new_arr[0].shift();
new_arr[1].shift();

old_array 中的项目被删除。这是一个二维数组。

原文由 London 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 373
2 个回答

你可以使用 两种 方法,这个:

 function clone (src) {
    return JSON.parse(JSON.stringify(src));
}

或这个:

 var newArray = oldArray.slice();

原文由 sourcecode 发布,翻译遵循 CC BY-SA 4.0 许可协议

一个较新的解决方案是像这样使用“from”:

 const newArr = Array.from(oldArr);

但这是一个浅拷贝,如果嵌套元素发生变化,它们将投影到新创建的数组中。那么最好的解决方案是使用

const newArr = JSON.parse(JSON.stringify(oldArr));

但该方法也不能确保所有。例如,如果数组的一个元素包含一个像 n => ++n 这样的函数,那么在使用 JSON 方法后它将为空,所以最好的解决方案是 deepClone 并且完整的解释我参考

创建 JavaScript 数组

原文由 Bojoer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏