0

簡単に言えば、データベースに対して REST 呼び出しを行い、成分のリストを取得しています。JSON は次のようになります。

[{"SubItemID":1,"MainItemID":1,"SubName":"2%","MainName":"Milk"},
{"SubItemID":2,"MainItemID":1,"SubName":"Skim/Fat Free","MainName":"Milk"},
{"SubItemID":3,"MainItemID":2,"SubName":"Chedder","MainName":"Cheese"}]

私がやりたいのは、これを次のように編成された便利な配列に変換することです。

  1. 牛乳
    1. 2%
    2. スキム/無脂肪
  2. チーズ
    1. チェダー

そのように注文することに加えて、各アイテムに関連付けられた ID を維持したいと考えています。したがって、チーズは「2」、チェダーは「3」になります。

Milk と Cheese の一意の値を配列に入れることができましたが、どうすればよいかわかりません。アドバイスをいただければ幸いです。

これが私がこれまでに持っているものです:

        $.ajax({
            url: "../api/IngredientChoices",
            contentType: "json",
            success: function (data) {
                var _subCategories = {};
                var _mainCategories = [];
                $.each(data, function (index, item) {
                    if ($.inArray(item.MainName, _mainCategories) === -1) {
                        _mainCategories.push(item.MainName);
                    }
                });
                $.each(_mainCategories, function () {
                    alert(this);
                });
            }
        });
4

3 に答える 3

1

詳細な作業回答。データは連想配列に追加されます。

obj = JSON.parse(data);

console.log(obj);

d = {}

$.each(obj, function (index, item) {
    if (!(item.MainItemID in d)) {
        d[item.MainItemID] = [];
        d[item.MainItemID][0] = item.MainName;
        d[item.MainItemID][1] = {}
    }

    d[item.MainItemID][1][item.SubItemID] = item.SubName;
});

console.log(d);

出力:

Object {1: Array[2], 2: Array[2]}
1: Array[2]
    0: "Milk"
        1: "2%"
        2: "Skim/Fat Free"
2: Array[2]
    0: "Cheese"
        3: "Chedder"
于 2013-01-14T05:51:44.193 に答える
1

質問を編集することをお勧めします。必要な「便利な」配列は、実際には配列ではありません。あなたはこれが欲しいかもしれません:
[
  {
   name : 'Milk',
   subTypes : [ '2%', 'Fat Free'],
  },
  {
   name : 'Cheese',
   subTypes : [ 'Cheddar' ],
  }
]

于 2013-01-14T05:54:52.497 に答える
1

jsfiddle の例

var data = [{"SubItemID":1,"MainItemID":1,"SubName":"2%","MainName":"Milk"},
{"SubItemID":2,"MainItemID":1,"SubName":"Skim/Fat Free","MainName":"Milk"},
{"SubItemID":3,"MainItemID":2,"SubName":"Chedder","MainName":"Cheese"}];

var ordered = {};

for(var i = data.length; i--;) {
  var mainItemID = data[i].MainItemID;
  if(!ordered[mainItemID]) {
    ordered[mainItemID] = {};
    ordered[mainItemID].MainName = data[i].MainName;
    ordered[mainItemID].MainItemID = mainItemID;
  }
  ordered[mainItemID][data[i].SubItemID] = data[i];
}

console.log(ordered);

そして、オブジェクト コレクションを含む配列を持つことができます。そうすれば、それを並べ替えることができます。

var dataArray = [];

for(var k in ordered) {
  dataArray.push(ordered[k]);
}

console.log(dataArray);

より複雑なデータの解析や操作を計画している場合は、BackbonejsSpineJS、またはwebSQLIndexedDBなどのモデル/コレクション フレームワークをお勧めします。

于 2013-01-14T05:58:17.847 に答える