JS来源:
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1;
c1.sort();
document.getElementById("demo").innerHTML = '1 -> '+c1+'<br>2 -> '+c2;
结果: 1 - &gt;宝马,萨博,沃尔沃 2 - &gt; BMW,萨博,沃尔沃
我需要: 1 - &gt;宝马,萨博,沃尔沃 2 - &gt;萨伯,沃尔沃,BMW
答案 0 :(得分:2)
该行:
var c2=c1;
...没有创建数组的副本,它创建了对同一个底层数组对象的第二个引用。因此,通过 变量进行的修改将影响同一个数组,无论是排序,添加元素还是其他任何内容。
幸运的是,创建数组的副本很容易:
var c2 = c1.slice();
.slice()
method返回数组的一部分副本,或者,如果您在没有参数的情况下调用它(或者仅使用0
的起始索引),则会复制整个数组。那么c1
和c2
变量将引用两个不同的数组,您可以在不改变另一个的情况下对其进行排序或修改。
答案 1 :(得分:2)
当你说
时var c2=c1;
您实际上是c2
指向c1
引用的同一个对象。然后你要更改c1
Array对象。由于c2
和c1
引用相同的对象,c1
和c2
会打印相同的内容。
您需要复制Array对象。您可以使用c1.slice()
来执行此操作,例如
var c2 = c1.slice();
现在c2
指的是c1
数组的副本。因此,对c1
所做的更改不会影响c2
对象。
答案 2 :(得分:0)
只需使用slice(0):
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1.slice(0);
c1.sort();
alert(c1);
alert(c2);
这是一个示例:
祝你好运, 菲利普