数组排序改变当前和旧变量

时间:2015-01-10 03:28:05

标签: javascript arrays sorting

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

3 个答案:

答案 0 :(得分:2)

该行:

var c2=c1;

...没有创建数组的副本,它创建了对同一个底层数组对象的第二个引用。因此,通过 变量进行的修改将影响同一个数组,无论是排序,添加元素还是其他任何内容。

幸运的是,创建数组的副本很容易:

var c2 = c1.slice();

.slice() method返回数组的一部分副本,或者,如果您在没有参数的情况下调用它(或者仅使用0的起始索引),则会复制整个数组。那么c1c2变量将引用两个不同的数组,您可以在不改变另一个的情况下对其进行排序或修改。

答案 1 :(得分:2)

当你说

var c2=c1;

您实际上是c2指向c1引用的同一个对象。然后你要更改c1 Array对象。由于c2c1引用相同的对象,c1c2会打印相同的内容。

您需要复制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);

这是一个示例:

  

http://jsfiddle.net/c3161930/

祝你好运, 菲利普