Javascript将数组复制到新数组

IT技术 javascript
2021-03-06 01:37:58

我想从现有数组形成一个数组,这样我就可以在不影响旧数组的情况下修改新数组。我意识到数组是可变的,这就是新数组影响旧数组的原因。

例如

old = ["Apples", "Bananas"];
new = old;

new.reverse();

旧的也被颠倒了。

在 Python 中,我可以只做new = list(old),但做new = new Array(old);将旧列表放入列表中。

2个回答

您可以使用以下.slice方法:

var old = ["Apples", "Bananas"];
var newArr = old.slice(0);
newArr.reverse(); 
// now newArr is ["Bananas", "Apples"] and old is ["Apples", "Bananas"]

Array.prototype.slice 返回数组一部分的浅拷贝。给它 0 作为第一个参数意味着您将返回所有元素的副本(从索引 0 开始)

您可以使用,old.slice()因为 0 是默认值。参见slice() 文档
2021-04-22 01:37:58
这是一个伟大的半黑客。我说 hack 是因为在不了解切片行为的情况下阅读代码时并不清楚发生了什么。Firefox 有一种array.values()方法可以复制这样的值。不幸的是,没有其他浏览器支持该方法。
2021-05-09 01:37:58
该 hack 不适用于多维数组。如果你有var oldArr = [ [1,2], [3,4] ]和没有var newArr = oldArr.slice(0),然后改变newArrnewArr[1][0] = 5和检查oldArr[0][0],你会发现它也将被更新。所以复制和循环遍历每个值的唯一方法
2021-05-11 01:37:58
@Joseph 这不是一个 hack - 它是浅层克隆 - 如果你想要一个深度克隆(JS 没有多维数组的概念 - 只是数组数组) - 你可以,JSON.parse(JSON.stringify(old))尽管这很少有用。
2021-05-14 01:37:58

尝试以下

newArray = oldArray.slice(0);