19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[JS] 非破壊的にソートしたいなら、slice()をsort()の前に

Last updated at Posted at 2019-09-06

やりたい事

オブジェクト配列の特定の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' ]

19
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?