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

array sort changing curent and old variable

JS 来源:

var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1;
c1.sort();
document.getElementById("demo").innerHTML = '1 -> '+c1+'<br>2 -> '+c2;

结果: 1 -> 宝马、萨博、沃尔沃 2 -> 宝马、萨博、沃尔沃

我需要: 1 -> 宝马、萨博、沃尔沃 2 -> 萨博、沃尔沃、宝马

行:

var c2=c1;

...不会创建数组的副本,它会创建对同一底层数组对象的第二个引用。因此,您通过 either 变量所做的修改将影响同一个数组,无论是排序、添加元素还是其他。

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

var c2 = c1.slice();

.slice() method returns 数组一部分的副本,或者,如果您不带参数调用它(或仅使用 0 的起始索引),它会复制整个数组。那么 c1c2 变量将引用两个不同的数组,您可以排序或以其他方式修改一个而不更改另一个。

当你说

var c2=c1;

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

您需要复制 Array 对象。你可以使用 c1.slice() 来做到这一点,就像这样

var c2 = c1.slice();

现在 c2 指的是 c1 数组的副本。因此,对 c1 所做的更改不会影响 c2 对象。

只需使用 slice(0):

var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1.slice(0);
c1.sort();
alert(c1);
alert(c2);

这里有一个示例:

http://jsfiddle.net/c3161930/

此致, 费利佩