やりたい事
オブジェクト配列の特定のkeyで昇順でソートしたい
やった事
sort(compareFunction)
を使ってソートしたら、処理自体はうまくいったが
元の配列を使用している処理にエラーが発生した
解決策:slice()を途中にはさむ
sort()は、破壊的なメソッド(元の配列を変更してしまう)なので、別の処理に影響が出る。
非破壊的にソートしたかったら、slice()を挟んでソートする。
例えばこんな感じ
var array = ['E', 'B', 'A', 'C', 'D'];
var sortedArray = array.slice().sort();
console.log(sortedArray); // [ 'A', 'B', 'C', 'D', 'E' ]
console.log(array) // [ 'E', 'B', 'A', 'C', 'D' ]
sliceは、beginからendまでをコピーして、配列を生成する。
引数に何も指定しかなったら全てコピーできるので、そのコピーにsort()をする事で、非破壊的なソートが可能となる。
追記
コメントいただきました。ありがとうございます!
Array.from()
を使う方法
var array = ['E', 'B', 'A', 'C', 'D'];
var sortedArray = Array.from(array).sort();
console.log(sortedArray); // [ 'A', 'B', 'C', 'D', 'E' ]
console.log(array) // [ 'E', 'B', 'A', 'C', 'D' ]