2016-08-25 149 views
0

上保留鍵我有一個對象,看起來像這樣:下劃線不是嵌套對象

var ingredientsObject = { 
    "Ingredients": [ 
     { "Section": "Ingredienser", "Name": "salt", "Value": 1, "Unit": "tsk" }, 
     { "Section": "Ingredienser", "Name": "olivolja", "Value": 1, "Unit": "msk" }, 
     { "Section": "Ingredienser", "Name": "lasagneplattor, (125 g) färska", "Value": 6, "Unit": "st" }, 
     { "Section": "Tomatsås", "Name": "salt", "Value": 0.5, "Unit": "tsk" }, 
     { "Section": "Tomatsås", "Name": "strösocker", "Value": 2, "Unit": "krm" } 
     { "Section": "Béchamelsås", "Name": "salt", "Value": 0.5, "Unit": "tsk" }, 
     { "Section": "Béchamelsås", "Name": "smör", "Value": 2.5, "Unit": "msk" } 
    ] 
}; 

,我試圖重新計算基礎上的份數每種成分的值用下劃線指定。

我一直在使用MapObject的(http://underscorejs.org/#mapObject)嘗試:

newIngredients = _.mapObject(ingredients.Ingredients, function (val, key) { 
    return val.Value/modifier; 
}); 

,但它返回一個對象,看起來像這樣:

Object {0: 0.3333333333333333, 1: 0.3333333333333333, 2: 2, 3: 0.3333333333333333, 4: 50, 5: 66.66666666666667, 6: 0.16666666666666666, 7: 0.6666666666666666, 8: 0.25, 9: 0.3333333333333333, 10: 0.3333333333333333, 11: 0.16666666666666666, 12: 0.8333333333333334, 13: 0.16666666666666666, 14: 0.8333333333333334, 15: 1.6666666666666667, 16: 0.6666666666666666} 

而我真正想要的是原始的對象只值如:

var ingredientsObject = { 
    "Ingredients": [ 
     { "Section": "Ingredienser", "Name": "salt", "Value": 0.3333333333333333, "Unit": "tsk" }, 
     { "Section": "Ingredienser", "Name": "olivolja", "Value": 0.3333333333333333, "Unit": "msk" }, 
     { "Section": "Ingredienser", "Name": "lasagneplattor, (125 g) färska", "Value": 2, "Unit": "st" } 
     // and so on... 
    ] 
}; 

我該如何做到這一點?

+1

鑑於你根本不想改變對象的*結構*,你只是想改變每個項目的''Value''屬性*爲什麼不使用'forEach ()循環''val.Value = val.Value/modifier;'? – nnnnnn

回答

0

好的基礎上,意見和我收到的建議,我想出了這個解決方案:

newIngredients = _.each(ingredientsObject, function (list) { 
    _.each(list, function (item) { 
     item.Value = item.Value/modifier; 
    }); 
}); 

該修改值本身不修改對象結構。

感謝@nnnnnn指出我在正確的方向。

0

嘗試:

newIngredients = _.map(ingredientsObject.Ingredients, function(item) { 
    return { 
     Section: item.Section, 
     Name: item.Name, 
     Value: item.Value/modifier, 
     Unit: item.Unit 
    }; 
}); 
+0

這給了我一個「Uncaught SyntaxError:意外的標記。」錯誤 – Winter

0

實際上ingredients.Ingredients是一個數組,_.mapObejct期望對象作爲第一個參數。您可以在下劃線的方式做到這一點:

_.mapObject(ingredientsObject, function(val, key) { 
    return _.map(val, function(ingredient) { 
     return _.extend(
      {}, 
      ingredient, 
      { 
      Value: ingredient.Value/modifier 
      } 
     ) 
    }) 
})