私はこのような配列を持っています:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
ソート後、出力配列は次のようになります。
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
つまり、各要素の長さの降順になります。
Array.sort
メソッドを使用して配列をソートできます。ストリングの長さをソート基準として考慮するソート関数は、次のように使用できます。
arr.sort(function(a, b){
// ASC -> a.length - b.length
// DESC -> b.length - a.length
return b.length - a.length;
});
注:["a", "b", "c"]
を文字列の長さでソートしても、["a", "b", "c"]
が返されるとは限りません。 仕様 によると:
ソートは必ずしも安定しているわけではありません(つまり、等しいと比較する要素が必ずしも元の順序のままであるとは限りません)。
目的が長さ、次に辞書順でソートすることである場合、追加の基準を指定する必要があります。
["c", "a", "b"].sort(function(a, b) {
return a.length - b.length || // sort by length, if equal then
a.localeCompare(b); // sort by dictionary order
});
あなたが尋ねたようにjavascriptで文字列の長さに応じて、並べ替えがあります:
[バブルソートによる問題の解決] [1]
[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here
Array.sortメソッドを使用して、この配列をソートできます。
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
ascendingソート順:
a.length - b.length
descendingソート順:
b.length - a.length
注意:すべてのブラウザがES6コードを理解できるわけではありません!
ES6では、矢印関数式を使用できます。
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
Salmanの答えに基づいて、それをカプセル化する小さな関数を作成しました。
function sortArrayByLength(arr, ascYN) {
arr.sort(function (a, b) { // sort array by length of text
if (ascYN) return a.length - b.length; // ASC -> a - b
else return b.length - a.length; // DESC -> b - a
});
}
でそれを呼び出す
sortArrayByLength( myArray, true );
このページ で説明されているように、残念ながら、関数をArrayプロトタイプに追加できない/すべきではないことに注意してください。
また、パラメーターとして渡された配列を変更し、何も返しません。これは配列の複製を強制し、大きな配列には適していません。誰かがより良いアイデアを持っている場合は、コメントしてください!
@shareefの回答を簡潔にするために修正しました。私が使う、
.sort(function(arg1, arg2) { return arg1.length - arg2.length })