私はこのような配列を持っています:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
ソート後、出力配列は次のようになります。
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
descending
各要素の長さの順に欲しい。
私はこのような配列を持っています:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
ソート後、出力配列は次のようになります。
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
descending
各要素の長さの順に欲しい。
メソッドを使用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
});
Array.sortメソッドを使用して、この配列をソートできます。
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
昇順ソートの場合:
a.length - b.length
降順の場合:
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'));
あなたが尋ねたように、JavaScriptを使用した文字列の長さに応じて、次のように並べ替えます。
【バブルソートによる問題解決】[1]
[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here
最新の JavaScript を使用すると、次のように実行できます。
降順
const arr = [
"ab",
"abcdefgh",
"abcd",
"abcdefghijklm"
];
arr.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(arr, null, 2));
昇順a
-で切り替えるだけb
const arr = [
"ab",
"abcdefgh",
"abcd",
"abcdefghijklm"
];
arr.sort((a, b) => a.length - b.length);
console.log(JSON.stringify(arr, null, 2));
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 プロトタイプに追加できない/追加できないことに注意してください。
また、パラメーターとして渡された配列を変更し、何も返しません。これにより、配列の複製が強制され、大規模な配列には適していません。誰かがより良いアイデアを持っている場合は、コメントしてください!
let arr = [5,2,100,1,20,3];
arr.sort((a,b)=>{
return a-b
})
console.log(arr) //[1, 2, 3, 5, 20, 100]
戻り値に対して、sort メソッドは要素の交換機能を実行します。
return < 0 { i.e -ve number then a comes before b}
return > 0 { i.e +ve number then b comes before a}
return == 0 { order of a and b remains same }
<script>
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "sdfds"
arr.sort(function(a,b){
return a.length<b.length
})
document.write(arr)
</script>
sort に渡す無名関数は、指定された配列をソートする方法を指示します。それをどうするか