2017-01-25 10 views
0

"Key"の配列を昇順で並べ替える必要があります。配列javascriptでのオブジェクトの並べ替え

Surprsingly最初の配列は降順にソートされ、次の2つは昇順にソートされます。これの理由は?

var MainObject4 = [{ "mainarray": [{ "Key": [9,768,78] }, 
{ "Key": [9,4,1] },{ "Key": [49,89,54] }] 
}]; 

var first = MainObject4[0]; 
Object.keys(MainObject4[0]).forEach(function (k) { 
    first[k].forEach(function (j) { 
     Object.keys(j).forEach(function (g) { 
        j[g].sort(); 
     },this); 
    },this); 
},this); 

alert(JSON.stringify(MainObject4, 0, 4)); 

予想される出力:

[9,78,768] 
[1,4,9] 
[49,54,89] 

私は今取得しています出力:

[768,78,9] 
[1,4,9] 
[49,54,89] 
+1

'[768,78,9]' *は辞書編集でソートされています。比較関数、たとえば 'function(x、y){return x-y;}を渡してみてください。 } ' – orip

答えて

1

var MainObject4 = [{ 
 
    "mainarray": [{ 
 
     "Key": [9, 768, 78] 
 
    }, { 
 
     "Key": [9, 4, 1] 
 
    }, { 
 
     "Key": [49, 89, 54] 
 
    }] 
 
}]; 
 

 
var first = MainObject4[0]; 
 

 
Object.keys(MainObject4[0]).forEach(function(k) { 
 
    first[k].forEach(function(j) { 
 
     Object.keys(j).forEach(function(g) { 
 
      j[g].sort(function(a, b) { 
 
      \t return a - b; 
 
      }); 
 
     }, this); 
 
    }, this); 
 
}, this); 
 

 
alert(JSON.stringify(MainObject4, 0, 4));

2

は、デフォルトのソート順は、文字列のUnicodeコードポイントに応じですdoc of Array.sort()

を参照してください。 。

あなたは数字を比較したい場合はドキュメントに言ったように、あなたは、比較関数を提供する必要があります。

数字の代わりに文字列を比較するために、比較関数は単純からBを引くことができます。あなたは、ソートパラメータを比較する機能を追加する必要が

1
var MainObject4 = [{ "mainarray": [ 
    { "Key": [9,768,78] }, 
    { "Key": [9,4,1] }, 
    { "Key": [49,89,54] } 
    ] 
}]; 


MainObject4[0].mainarray.forEach(function (j) { 
    Object.keys(j).forEach(function (g) { 
       j[g].sort(function (a, b) { 
      return a - b; 
     }); 
    },this); 
},this); 

alert(JSON.stringify(MainObject4, 0, 4)); 
0

それが起こっているため、JavaScriptののソート方法は、要素を比較するために、デフォルトのユニコードで取ります。数値をソートするには、要素を比較するコールバック関数を明示的に記述する必要があります。

var input = [1,20,2,12]; 
 
console.log(input.sort());// prints 1,12,2,20 
 
console.log(input.sort(function(a,b){ 
 
    return a-b; 
 
}));// prints 1,2,12,20

元 についてだから、あなたは自分のソートと比較機能を追加する必要があります。これはすべて

関連する問題