barValues is an array I’m passing to a function. Within the function I have this:
alert(barValues);
var sortedBarValues = barValues;
sortedBarValues.sort(function(a,b){return b - a});
alert(barValues);
I’m trying to end up with two arrays. barValues being the original array and sortedBarValues being a copy of that array, now sorted.
However, via the two alerts, I’m finding that barValues is ALSO being sorted. Why is that? What is the proper way to make a copy of an array so sort it separately from the original array?
With the statement
var sortedBarValues = barValues;, you are not making a copy of the array. You are only making a reference. Both names refer to the same array.You can copy it with
var sortedBarValues = barValues.slice();. The slice method is meant for slicing arrays, but if you don’t pass any parameters to it, it will make a copy.Keep in mind that using the slice method won’t work properly on multi-dimensional arrays. Copying multi-dimensional arrays is somewhat tricky, but jQuery’s extend function can do it for you.
You can see information on how to copy an array in this post.