2017-09-08 10 views
4

私は2つの次元配列を持っていますし、私は順番にソートし、文字列の長さに基づいています。どうすればいい?これは私のコードです:長さに基づいて2つの次元配列を文字列で並べ替える方法は?

arr = [['ab',0],['ax',0],['ac',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]]; 
 
function sortByLen(a,b){ 
 
    return (a[0] < b[0]) ? -1 : 1; 
 
} 
 
arr.sort(sortByLen); 
 
console.log(arr);

私はそれがこの順序私はそれを行うことができますどのよう

["ab", 0] 
["ac", 0] 
["ad", 0] 
["ax", 0] 
["ay", 0] 
["bd", 0] 
["asd", 0] 
["bsd", 0] 

になりたいですか?

答えて

1

を試してみてください長さの違いを使って長さが等しい場合は、アルファベット順に並べる場合はとします。第二は、第1選別を尊重していないため、

var array = [['ab', 0], ['ax', 0], ['ac', 0], ['bsd', 0], ['ad', 0], ['asd', 0], ['bd', 0], ['ay', 0]]; 
 

 
array.sort(function (a, b) { 
 
    return a[0].length - b[0].length || a[0].localeCompare(b[0]); 
 
}); 
 

 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1

これは達成しようとしていることですか?

var arr = [['ab',0],['ax',0],['ac',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]]; 
 

 
var sorted = arr.sort(function(a,b) { 
 
    return a > b 
 
    }).sort(function(a,b) { 
 
    return a[0].length - b[0].length 
 
    }) 
 

 
console.log('sorted',sorted)

+0

ダブルソートは、あまりにも多くのものです。 –

+0

2番目の並べ替えは、アルファベット順にソートされた配列に適用されます。私の答えは読みやすくても、あなたの答えはより良いパフォーマンスをもたらします! –

+0

['Array#sort'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)は安定しておらず、別のソートは最後のソートを破棄しますソート。 –

0

長さが異なるかどうかを確認してください。もしそうなら、それらを並べ替える。等しい場合は、アルファベット順にソート:

var arr = [['ab',0],['ax',0],['ac',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]]; 
function sortByLen(a,b){ 
    if(a[0].length < b[0].length) return -1; 
    if(a[0].length > b[0].length) return 1; 
    if(a[0] < b[0]) return -1; 
    if(a[0] > b[0]) return 1; 
    return 0; 
} 
arr.sort(sortByLen); 
console.log(arr); 
0

はあなたが持つ内側の配列の最初の項目の長さを尊重し、コールバックを持つ単一の並べ替えを使用する場合があります。この

arr = [['ac',0],['ab',0],['ax',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]]; 
 

 
const sortedItems = arr 
 
    .sort((a, b) => a[0] > b[0]) 
 
    .sort((a, b) => a[0].length > b[0].length) 
 

 
console.log(sortedItems)

+0

2番目のソートは1番目のソートを尊重しないので、2番目のソートは多すぎます。 –

関連する問題