数组排序改变当前和旧变量
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
的起始索引),它会复制整个数组。那么 c1
和 c2
变量将引用两个不同的数组,您可以排序或以其他方式修改一个而不更改另一个。
当你说
var c2=c1;
你实际上是在让 c2
指向由 c1
引用的同一个对象。然后您正在更改 c1
Array 对象。由于 c2
和 c1
引用相同的对象,因此 c1
和 c2
将打印相同的内容。
您需要复制 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);
这里有一个示例:
此致,
费利佩
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
的起始索引),它会复制整个数组。那么 c1
和 c2
变量将引用两个不同的数组,您可以排序或以其他方式修改一个而不更改另一个。
当你说
var c2=c1;
你实际上是在让 c2
指向由 c1
引用的同一个对象。然后您正在更改 c1
Array 对象。由于 c2
和 c1
引用相同的对象,因此 c1
和 c2
将打印相同的内容。
您需要复制 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);
这里有一个示例:
此致, 费利佩