我想从现有数组中创建一个新的数组,以便我可以修改新数组而不影响旧数组。我知道数组是可变的,这就是为什么新数组会影响旧数组的原因。
例如:
old = ["Apples", "Bananas"];
new = old;
new.reverse();
旧的也被反转了。
在Python中,我可以只需执行new = list(old)
,但执行new = new Array(old);
会将旧列表放入一个列表中。
我想从现有数组中创建一个新的数组,以便我可以修改新数组而不影响旧数组。我知道数组是可变的,这就是为什么新数组会影响旧数组的原因。
例如:
old = ["Apples", "Bananas"];
new = old;
new.reverse();
旧的也被反转了。
在Python中,我可以只需执行new = list(old)
,但执行new = new Array(old);
会将旧列表放入一个列表中。
.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开始)
array.values()
方法,可以像这样复制值。不幸的是,其他浏览器不支持该方法。 - mattdeviovar oldArr = [ [1,2], [3,4] ]
并且执行了 var newArr = oldArr.slice(0)
然后改变 newArr
中的值,例如 newArr[1][0] = 5
并检查 oldArr[0][0]
,你会发现它也被更新了。所以唯一的复制方法是循环遍历并逐个切片每个值。 - JosephJSON.parse(JSON.stringify(old))
,尽管这很少是一个有用的事情。 - Benjamin GruenbaumnewArray = oldArray.slice(0);
var arrOld = ["Apples", "Bananas"]; var arrNew= [...arrOld];
- GibboK