配列の並べ替えについて学習しようとしています。それはかなり簡単なようです。しかし、mozillaサイトで、マップの並べ替えについて説明しているセクションに出くわしました(ページの約4分の3)。
compareFunctionは、配列内の要素ごとに複数回呼び出すことができます。compareFunctionの性質によっては、これにより高いオーバーヘッドが発生する可能性があります。compareFunctionが実行する作業が多く、並べ替える要素が多いほど、並べ替えにマップを使用することを検討する方が賢明です。
与えられた例はこれです:
// the array to be sorted
var list = ["Delta", "alpha", "CHARLIE", "bravo"];
// temporary holder of position and sort-value
var map = [];
// container for the resulting order
var result = [];
// walk original array to map values and positions
for (var i=0, length = list.length; i < length; i++) {
map.push({
// remember the index within the original array
index: i,
// evaluate the value to sort
value: list[i].toLowerCase()
});
}
// sorting the map containing the reduced values
map.sort(function(a, b) {
return a.value > b.value ? 1 : -1;
});
// copy values in right order
for (var i=0, length = map.length; i < length; i++) {
result.push(list[map[i].index]);
}
// print sorted list
print(result);
私はいくつかのことを理解していません。compareFunction
つまり、「配列内の要素ごとに複数回呼び出すことができる」とはどういう意味ですか?誰かがその例を教えてもらえますか?次に、例で何が行われているのかは理解できますが、の潜在的な「より高いオーバーヘッド」については理解できませんcompareFunction
。ここに示す例は非常に単純なようで、配列をオブジェクトにマッピングし、その値を並べ替えてから、配列に戻すと、一見するとはるかに多くのオーバーヘッドがかかります。これは単純な例であり、おそらく手順を示す以外の目的ではないことを理解しています。しかし、誰かがこのようにマップする方がオーバーヘッドが低くなる場合の例を挙げられますか?それはもっと多くの仕事のようです。
ありがとう!