1. ホーム
  2. javascript

Javascriptで文字列を降順にソートする(最も効率的)?

2023-09-26 03:06:35

質問

W3CSchoolsにこのような例があります。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();

Javascriptで文字列を降順にソートするには、これが最も効率的な方法でしょうか?

更新情報

答えのひとつは localeCompare . ただ、もし reverse() を行う場合、それはすべてのロケールに対して動作するのでしょうか(多分これは別の質問です - ちょうどコメントで私に知らせてください)?

どのように解決するのですか?

もし、あなたが

obj.sort().reverse();

VS

obj.sort((a, b) => (a > b ? -1 : 1))

VS

obj.sort((a, b) => b.localeCompare(a) )

パフォーマンスの勝者は: obj.sort().reverse() .

10.000個の要素を持つ配列でテストしています。 obj.sort().reverse() よりも速いです。 obj.sort( function ) (クロームを除く)、そして obj.sort( function ) (を使用)。 localCompare ).

パフォーマンステストはこちら :

var results = [[],[],[]]

for(let i = 0; i < 100; i++){
  const randomArrayGen = () => Array.from({length: 10000}, () => Math.random().toString(30));
  const randomArray = randomArrayGen();
  const copyArray = x => x.slice();

  obj = copyArray(randomArray);
  let t0 = performance.now();
  obj.sort().reverse();
  let t1 = performance.now();

  obj = copyArray(randomArray);
  let t2 = performance.now();
  obj.sort((a, b) => (a > b ? -1 : 1))
  let t3 = performance.now();

  obj = copyArray(randomArray);
  let t4 = performance.now();
  obj.sort((a, b) => b.localeCompare(a))
  let t5 = performance.now();  

  results[0].push(t1 - t0);
  results[1].push(t3 - t2);
  results[2].push(t5 - t4);  
}

const calculateAverage = x => x.reduce((a,b) => a + b) / x.length ;

console.log("obj.sort().reverse():                   " + calculateAverage(results[0]));
console.log("obj.sort((a, b) => (a > b ? -1 : 1)):   " + calculateAverage(results[1]));
console.log("obj.sort((a, b) => b.localeCompare(a)): " + calculateAverage(results[2]));