Javascript copy array to new array
我想从现有数组中形成一个数组,以便在不影响旧数组的情况下修改新数组。我意识到数组是可变的,这就是新数组影响旧数组的原因。
例如。
1 2 3 4
| old = ["Apples","Bananas"];
new = old;
new.reverse(); |
旧的也被颠倒了。
在python中,我只需要执行new = list(old),但执行new = new Array(old);会将旧列表放入一个列表中。
- 在ES6中,可以使用扩展语法示例:var arrOld = ["Apples","Bananas"]; var arrNew= [...arrOld];。
您可以使用.slice方法:
1 2 3 4
| var old = ["Apples","Bananas"];
var newArr = old.slice(0);
newArr.reverse();
// now newArr is ["Bananas","Apples"] and old is ["Apples","Bananas"] |
slice返回数组一部分的浅副本。将它0作为第一个参数表示返回所有元素的副本(从索引0开始,即)
- 谢谢!我会尽量回答的。
- 没问题,很高兴能帮上忙。
- 您只能使用old.slice(),因为0是默认值。请参见slice()文档
- @克丽丝-在那个小提琴上,你用的是拼接,不是切片。
- 这是一个伟大的半黑客。我之所以说hack,是因为在不了解slice的行为的情况下,在阅读代码时,它并不真正清楚会发生什么。firefox有一个array.values()方法,可以复制这样的值。不幸的是,没有其他浏览器支持该方法。
- 这种方法在多维数组上是行不通的。如果你有var oldArr = [ [1,2], [3,4] ]和var newArr = oldArr.slice(0),然后用newArr[1][0] = 5更改newArr,检查oldArr[0][0],你会发现它也会更新。所以复制、循环和切片每个值的唯一方法
- @约瑟夫,这不是一个黑客-它是浅克隆-如果你想要一个深克隆(JS没有多维数组的概念-只是数组的数组),你可以使用cx1(7),尽管这很少有用。
尝试以下操作
1
| newArray = oldArray.slice(0); |
号