Does .sort function change original array?
It's a decent question, and let's answer it properly:
const a = [1, 2, 3];
const b = a.sort();
console.log(a === b); // true
there is your answer. The ===
operator for objects will compare memory locations, so it's the same object in memory.
Which is a shame because it would be better if sort created a new array (immutability etc), but in many languages it does not return a new array, but the same array (reordered).
So if you want it to be immutable, you can do:
const a = [1, 2, 3];
const b = a.slice(0).sort();
Use slice()
to sort a copy of the original array.
var arr =[{time:4},{time:3},{time:6}];
arr.sort(function (a, b) {
return a.time-b.time;
});
will mutate the original array and returns :
[ { time: 3 }, { time: 4 }, { time: 6 } ]
and console.log(arr) returns
[ { time: 3 }, { time: 4 }, { time: 6 } ]
but
var arr =[{time:4},{time:3},{time:6}];
arr.slice().sort(function (a, b) {
return a.time-b.time;
});
returns
[ { time: 3 }, { time: 4 }, { time: 6 } ]
but will not affect the original array.
console.log(arr) returns
[ { time: 4 }, { time: 3 }, { time: 6 } ]