117

私はこのような配列を持っています:

arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"

ソート後、出力配列は次のようになります。

arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"  

descending各要素の長さの順に欲しい。

4

12 に答える 12

283

メソッドを使用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
});
于 2012-05-17T06:24:48.797 に答える
9

Array.sortメソッドを使用して、この配列をソートできます。

ES5 ソリューション

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 コードを理解できるわけではありません!

ES6 では、アロー関数式を使用できます。

let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));

于 2018-07-04T19:35:56.703 に答える
3

あなたが尋ねたように、JavaScriptを使用した文字列の長さに応じて、次のように並べ替えます。

【バブルソートによる問題解決】[1]

[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here

于 2012-05-17T06:29:02.420 に答える
1

最新の 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));

于 2021-08-04T20:00:16.777 に答える
0

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 プロトタイプに追加できない/追加できないことに注意してください。

また、パラメーターとして渡された配列を変更し、何も返しません。これにより、配列の複製が強制され、大規模な配列には適していません。誰かがより良いアイデアを持っている場合は、コメントしてください!

于 2015-09-24T14:55:45.983 に答える
0
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 }
于 2021-11-22T06:20:47.253 に答える
-3
<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 に渡す無名関数は、指定された配列をソートする方法を指示します。それをどうするか

于 2012-05-17T06:44:37.400 に答える