联合来文来源:
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1;
c1.sort();
document.getElementById("demo").innerHTML = '1 -> '+c1+'<br>2 -> '+c2;结果:1 ->宝马,萨博,沃尔沃2 ->宝马,萨博,沃尔沃
我需要:1 ->宝马,萨博,沃尔沃2 ->萨博,沃尔沃,宝马
发布于 2015-01-10 03:32:56
当你说
var c2=c1;实际上,您正在使c2指向c1引用的同一个对象。然后更改c1数组对象。因为c2和c1引用相同的对象,所以c1和c2将打印相同的对象。
您需要复制Array对象。您可以使用c1.slice()这样做。
var c2 = c1.slice();现在,c2引用c1数组的副本。因此,对c1所做的更改不会影响c2对象。
发布于 2015-01-10 03:31:51
这句话:
var c2=c1;.不创建数组的副本,而是创建对同一个基础数组对象的第二个引用。因此,您通过任何一个变量所做的修改都会影响到相同的数组,无论是排序、添加元素还是其他什么。
幸运的是,创建数组的副本很容易:
var c2 = c1.slice(); method返回数组一部分的副本,如果不使用参数(或仅使用0的开始索引)调用它,则会复制整个数组。因此,c1和c2变量将引用两个不同的数组,您可以在不更改另一个数组的情况下对其中一个数组进行排序或修改。
发布于 2015-01-10 03:34:47
只需使用片(0):
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1.slice(0);
c1.sort();
alert(c1);
alert(c2);这里有一个样本:
http://jsfiddle.net/c3161930/
向你问好,费利佩
https://stackoverflow.com/questions/27872576
复制相似问题