2016-05-12 110 views
0

基本上,我有一個包含對象的數組,它們需要組合在一起。這很難解釋,但如果我只是給你們一個例子,它可能會更容易。使用下劃線創建對象集合

結果數據

[ 
{ 
    "Category": "Préparé", 
    "Sandwich": "Martino", 
    "Ingredient": "Ansjovis", 
    "Price": 3.1 
}, 
{ 
    "Category": "Préparé", 
    "Sandwich": "Martino", 
    "Ingredient": "Tabasco", 
    "Price": 3.1 
}, 
{ 
    "Category": "Veggie", 
    "Sandwich": "Gezond", 
    "Ingredient": "Tomaat", 
    "Price": 2.5 
}, 
{ 
    "Category": "Veggie", 
    "Sandwich": "Gezond", 
    "Ingredient": "Kaas", 
    "Price": 2.5 
} 
]; 

這是我的什麼陣看起來像一個基本的例子。我無法改變這種結構,這是我們的API如何提供數據。

我其實需要的是這樣的結構:

[ 
{ 
    "CategoryName": "Prépare", 
    "Sandwiches": [ 
    { 
    "SandwichName": "Martino", 
    "Price": 3.1, 
    "Ingredients": ["Ansjovis", "Tabasco"] 
    } 
    ] 
}, 
{ 
    "CategoryName": "Veggie", 
    "Sandwiches": [ 
    { 
    "SandwichName": "Gezond", 
    "Price": 2.5, 
    "Ingredients": ["Tomaat", "Kaas"] 
    } 
    ] 
} 
] 

我嘗試過的一些東西用下劃線和_.groupBy,_.sortBy,_.countBy 但是,唉,什麼我都試過的實際工作。這甚至可能與下劃線(或其他圖書館)?

同樣在旁註中,這個例子可能有一些JSON結構錯誤,因爲我自己寫了。 API提供的數據格式正確。

這個例子只有2個三明治,但實時,我會用每20個三明治等檢索多個類別。這只是一個縮小的例子,但它提供了我需要的一個概念。

回答

0

試試這個簡單的JS

var map = {}; 
results.forEach(function(obj){ 
    map[ obj.CategoryName ] = map[ obj.CategoryName ] || []; 
    map[ obj.CategoryName ].push(obj); 
}); 

var output = Object.keys(map).map(function(key){ 
    var arr = []; 
    map[key].forEach(function(obj){ 
    arr.push({ 
     "SandwichName": obj.SandwichName, 
     "Price": obj.Price, 
     "Ingredients": obj.Ingredients 
    }); 
    }); 
    return { "CategoryName" : key , "Sandwiches" : arr }; 
}); 
+0

沒有做的伎倆。得到了一個包含所有對象的數組,與我已有的一樣,所有屬性都具有「未定義」值。這是假設'objArray'是數組傳遞 – Jorrex

+0

你在'output'得到什麼 – gurvinder372

+0

看一看:https://jsfiddle.net/Jorrex/ydkh8wdq/ – Jorrex

0

下面的代碼會做的伎倆爲您提供:

var data = [...]; // this is your json-data 

var result = _.map(_.uniq(_.pluck(data, 'Category')), function(category) { 
    var sandwiches = _.uniq(_.pluck(_.where(data, { Category: category }), 'Sandwich')); 
    return { 
     CategoryName: category, 
     Sandwiches: _.map(sandwiches, function(sandwich) { 
      return { 
      SandwitchName: sandwich, 
      Price: _.findWhere(data, { Category: category, Sandwich: sandwich }).Price, 
      Ingredients: _.pluck(_.where(data, { Category: category, Sandwich: sandwich }), 'Ingredient') 
     }; 
     }) 
    }; 
});