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 and 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 回答