52

たとえば、次のコードがあります。

var json = {
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    },
    "user3" : {
        "id" : 1
    }
}

このjsonを次のようにソートするにはどうすればよいですか-

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}

ユーザーをIDでソートし
ました..JavaScriptでこれを行う方法がわかりません..

4

4 に答える 4

122

まず、これはJSONではありません。これは JavaScript オブジェクト リテラルです。JSON はデータの文字列表現であり、たまたま JavaScript 構文に非常によく似ています。

次に、オブジェクトがあります。それらはソートされていません。要素の順序は保証されません。順序を保証したい場合は、配列を使用する必要があります。これには、データ構造を変更する必要があります。

1 つのオプションは、データを次のようにすることです。

var json = [{
    "name": "user1",
    "id": 3
}, {
    "name": "user2",
    "id": 6
}, {
    "name": "user3",
    "id": 1
}];

これでオブジェクトの配列ができたので、それを並べ替えることができます。

json.sort(function(a, b){
    return a.id - b.id;
});

結果の配列は次のようになります。

[{
    "name": "user3",
    "id" : 1
}, {
    "name": "user1",
    "id" : 3
}, {
    "name": "user2",
    "id" : 6
}];
于 2013-07-16T19:37:33.873 に答える
10

Json の JavaScript 表現をソートする簡単なスニペットを次に示します。

function isObject(v) {
    return '[object Object]' === Object.prototype.toString.call(v);
};

JSON.sort = function(o) {
if (Array.isArray(o)) {
        return o.sort().map(JSON.sort);
    } else if (isObject(o)) {
        return Object
            .keys(o)
        .sort()
            .reduce(function(a, k) {
                a[k] = JSON.sort(o[k]);

                return a;
            }, {});
    }

    return o;
}

次のように使用できます。

JSON.sort({
    c: {
        c3: null,
        c1: undefined,
        c2: [3, 2, 1, 0],
    },
    a: 0,
    b: 'Fun'
});

それは出力されます:

{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}
于 2017-08-23T09:42:26.683 に答える
1

いくつかの点で、あなたの質問は非常に正当なもののように見えますが、それでもXY problem. 最終結果は、ソートされた値を何らかの方法で表示したいということだと思いますか? Bergi がコメントで述べたように、特定の順序でプロパティを表示するために Javascript オブジェクト ( ) に完全に依存することはできません。{i_am: "an_object"}

i_am表示順序については、オブジェクト (つまり) の各キーを取得し、それらを順序付けられた配列に並べ替えることをお勧めします。次に、表示するオブジェクトの要素を取得するときにその配列を使用します。擬似コード:

var keys = [...]
var sortedKeys = [...]
for (var i = 0; i < sortedKeys.length; i++) {
  var key = sortedKeys[i];
  addObjectToTable(json[key]);
}
于 2013-07-16T19:42:36.990 に答える
-3
if(JSON.stringify(Object.keys(pcOrGroup).sort()) === JSON.stringify(Object.keys(orGroup)).sort())
{
    return true;
}
于 2014-09-25T21:10:39.747 に答える