JS Source:
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1;
c1.sort();
document.getElementById("demo").innerHTML = '1 -> '+c1+'<br>2 -> '+c2;
RESULT: 1 -> BMW,Saab,Volvo 2 -> BMW,Saab,Volvo
I need to be: 1 -> BMW,Saab,Volvo 2 -> Saab,Volvo,BMW
JS Source:
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1;
c1.sort();
document.getElementById("demo").innerHTML = '1 -> '+c1+'<br>2 -> '+c2;
RESULT: 1 -> BMW,Saab,Volvo 2 -> BMW,Saab,Volvo
I need to be: 1 -> BMW,Saab,Volvo 2 -> Saab,Volvo,BMW
When you say
var c2=c1;
you are actually making c2 point to the same object referred by c1. And then you are changing the c1 Array object. Since c2 and c1 refer the same object, c1 and c2 will print the same.
You need to make a copy of the Array object. You can use c1.slice() to do that, like this
var c2 = c1.slice();
Now c2 refers to a copy of the c1 array. So, changes made to the c1 will not affect the c2 object.
The line:
var c2=c1;
...doesn't create a copy of the array, it creates a second reference to the same underlying array object. So modifications that you make via either variable will affect the same array, whether that be sorting, adding elements, or whatever.
Fortunately it's easy to create a copy of an array:
var c2 = c1.slice();
The .slice() method returns a copy of a portion of an array, or, if you call it with no arguments (or with just a start index of 0) it copies the whole array. So then the c1 and c2 variables will refer to two different arrays and you can sort or otherwise modify one without changing the other.
Just use slice(0):
var c1 = ["Saab", "Volvo", "BMW"];
var c2=c1.slice(0);
c1.sort();
alert(c1);
alert(c2);
Here a sample:
Best regards, Felipe