7

私の JavaScript オブジェクトは次のようになります。

"ivrItems": {
  "50b5e7bec90a6f4e19000001": {
    "name": "sdf",
    "key": "555",
    "onSelect": "fsdfsdfsdf"
  },
  "50b5e7c3c90a6f4e19000002": {
    "name": "dfgdf",
    "key": "666",
    "onSelect": "fdgdfgdf",
    "parentId": null
  },
  "50b5e7c8c90a6f4e19000003": {
    "name": "dfdf",
    "key": "55",
    "onSelect": "dfdffffffffff",
    "parentId": null
  }
}

ここで、オブジェクトの順序を動的に変更したいと考えています。

ソート後、オブジェクトは次のようになります。

"ivrItems": {
  "50b5e7bec90a6f4e19000001": {
    "name": "sdf",
    "key": "555",
    "onSelect": "fsdfsdfsdf"
  },
  "50b5e7c8c90a6f4e19000003": {
    "name": "dfdf",
    "key": "55",
    "onSelect": "dfdffffffffff",
    "parentId": null
  }
  "50b5e7c3c90a6f4e19000002": {
    "name": "dfgdf",
    "key": "666",
    "onSelect": "fdgdfgdf",
    "parentId": null
  }
}

これを行う方法はありますか?

4

4 に答える 4

3

オブジェクトの列挙の順序を取得してから変更するには、順序を手動で定義する必要があります。これは通常、オブジェクトのプロパティを配列に追加することによって行われます。

var keys = Object.keys(data.ivrItems);

これで、配列を反復処理しkeys、キーを使用してオブジェクトのメンバーにアクセスできirvItemsます。

keys.forEach(function(key) {
    console.log(data.irvItems[key]);
});

これで、順序は常に によって指定されObject.keysた順序になりますが、順序が希望どおりになるという保証はありません。

その配列を取得し、必要な順序を使用して並べ替えることができます。

keys.sort(function(a, b) {
    return +data.irvItems[a].key - +data.irvItems[b].key;
});

keyこの並べ替えは、数値変換後に各オブジェクトのネストされたプロパティによってキーを並べ替えます。

于 2012-11-29T03:55:35.347 に答える
2

Javascript オブジェクトは本質的に順不同です。
そんなことはできません。

于 2012-11-29T03:51:40.240 に答える
2

配列を使用する必要があります。オブジェクト キーに順序はありません

このような:

{
    "ivrItems": [
        {
            "id": "50b5e7bec90a6f4e19000001",
            "name": "sdf",
            "key": "555",
            "onSelect": "fsdfsdfsdf"
        },
        {
            "id": "50b5e7c8c90a6f4e19000003",
            "name": "dfdf",
            "key": "55",
            "onSelect": "dfdffffffffff",
            "parentId": null
        },
        {
            "id": "50b5e7c3c90a6f4e19000002",
            "name": "dfgdf",
            "key": "666",
            "onSelect": "fdgdfgdf",
            "parentId": null
        }
    ]
}
于 2012-11-29T03:54:37.220 に答える
1

ブラウザーでこれを行う場合、ブラウザー間の互換性に苦労することになるでしょう。ただし、コンピューターはほとんどが決定論的であるため、1 つの JavaScript エンジンの実装でこれを確実に達成できる可能性があります。たとえば、Chrome REPL / コンソールでは、プロパティを順番に追加するだけでこの順序を取得できます。

var n = {}
n.b = 2
n.c = 3
var m = {}
m.c = 3
m.b = 2
JSON.stringify(n)
> "{"b":2,"c":3}"
JSON.stringify(m)
> "{"c":3,"b":2}"

そのため、後で見つけたい順序でキーを追加して、オブジェクトを再構築できます。

しかし、他の人は正しいです。真の予測可能な順序が必要な場合は、配列を使用する必要があります。

于 2012-11-29T03:57:29.937 に答える