12

私はJSにこのオブジェクトを持っています:

var list = {134 : "A",140 : "B",131 : "C"}

私はそれを実行します:

jQuery.each(list, function(key, value) { 
console.log(key + " - " + value);
});

出力は次のようになります。

134 - A
140 - B
131 - C

しかし、理由はわかりません。出力は次のとおりです。

131 - C
134 - A
140 - B

どうすれば修正できますか?

4

4 に答える 4

7

まず、これはリストではなく、オブジェクトです。オブジェクトの順序が維持されるとは限りません。実装ごとに異なる順序が選択される場合があります。

一方、配列順序を保持します。

var list = [[134, "A"],[140, "B"],[131, "C"]];


jQuery.each(list, function(i, obj) { 
  console.log(i + " - " + obj[0] + " - " + obj[1]);
});
于 2012-10-16T12:10:34.937 に答える
5

あなたの質問に出くわしましたが、理解するのに 10 分かかりました。

これはあなたの問題を解決する方法です:

var list = {134 : "A",140 : "B",131 : "C"};

// 1 - property to list
list = Object.keys(list).map(
    function(key) {
         return { num : key , char : list[key]};;
     });

console.debug(list);
// 2 - sorting the list
var sorted = list.sort(function(a, b) {
            if(a.char < b.char) return -1; return 1;
        });

// 3 output
jQuery.each(sorted, function(index, obj) {      
        console.log(obj.num + " - " + obj.char);
});

JsFiddle: https://jsfiddle.net/wx38rz5L/1578/

于 2016-08-08T15:46:48.393 に答える
4

仕様によると、オブジェクトのプロパティには定義された順序がありません。

プロパティを列挙する仕組みと順序 (...) は指定されていません。

ソース

したがって、ECMA 実装は任意の順序で反復する必要はありません。実際、ブラウザやバージョンによって順序が異なります。

于 2012-10-16T12:08:13.873 に答える
4

これは、JavaScript オブジェクト項目に順序がないために発生します。

これを修正するために、2 つの配列を使用できます。1 つはキー、もう 1 つは値です。

var keys = [134, 140, 131],
    values = ["A", "B", "C"];

$.each(keys, function(i, key) {
    console.log(key, values[i]);
});
于 2012-10-16T12:08:20.800 に答える