2013-01-14 16 views
0

簡而言之,我正在對數據庫進行REST調用,並獲取一份配料列表。 JSON的樣子:一個數組中的Javascript/jquery OOP數組

[{"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. chedder

除此之外,我想維護與每個項目關聯的ID。所以奶酪會有「2」,而切德會有「3」。

我已經能夠將牛奶和奶酪的獨特值填入數組中,但我不知道如何繼續。建議將不勝感激!

這是我到目前爲止有:

 $.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); 
       }); 
      } 
     }); 
+0

你使用JSON'parse()'嗎? – ATOzTOA

+0

@ATOzTOA我添加了我當前的Ajax代碼 – Yecats

回答

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" 
+0

我想OP是問如何重構JSON,而不是如何解析它。 –

1

你可能需要編輯你的問題。你想要的'有用'數組實際上不是一個數組。你可能會想這樣的:
[
  {
   名稱: '奶',
   亞型: '2%', '無脂'],
 },
  {
   名: '奶酪',
   亞型:[ '切達'],
 }
]

1

jsfiddle example

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); 

如果計劃更復雜的數據解析,或操縱,我會推薦一些模型/收集框架,如:Backbonejs,SpineJS,或甚至使用webSQLIndexedDB

+0

你沒有獲得'MainName'。 – ATOzTOA

相關問題