Javascript 从其他对象中取出对象
我要更改此对象:Javascript 从其他对象中取出对象,javascript,object,for-loop,Javascript,Object,For Loop,我要更改此对象: { item1: 6, item2: { item3: 1, item4: 1 }, item4: 1, item5: { item3: 1, item1: 3 } } 为此目的: { item1: 9, item3: 2, item4: 2 } 因此,从每个对象中获取所有键:值,并将它们插入到一个对象中并求和 我的实际代码: functi
{
item1: 6,
item2: {
item3: 1,
item4: 1
},
item4: 1,
item5: {
item3: 1,
item1: 3
}
}
为此目的:
{
item1: 9,
item3: 2,
item4: 2
}
因此,从每个对象中获取所有键:值,并将它们插入到一个对象中并求和
我的实际代码:
function calculate_recipe(item, quantity) {
if (json.options[item].material) {
return quantity;
} else {
let crafting_quantity = json.craftable[item].quantity
let ingredients = json.craftable[item].ingredients
let items_needed = {}
for (let ingredient in ingredients) {
let ingredient_quantity = ingredients[ingredient]
items_needed[ingredient] = calculate_recipe(ingredient, Math.ceil(quantity / crafting_quantity) * ingredient_quantity);
}
return items_needed
}
}
returnitems\u needed
返回我之前显示的第一个对象。您可以为嵌套对象的递归调用获取一个映射,然后返回一个平面对象
函数getFlatSum(对象,映射=新映射){
Object.entries(Object.forEach)([k,v])=>{
if(v&&typeof v=='object'){
getFlatSum(v,map);
}否则{
map.set(k,(map.get(k)| 0)+v);
}
});
返回Object.assign({},…Array.from(map,([k,v])=>({[k]:v}));
}
var data={item1:6,item2:{item3:1,item4:1},item4:1,item5:{item3:1,item1:3},
结果=getFlatSum(数据);
控制台日志(结果)代码>请您展示一下您为解决此问题所做的任何努力,以便我们可以帮助您解决您遇到的问题?就目前而言,这太宽泛了。我添加了我的代码