Javascript对象相同属性键的总和值

标签 javascript

我有以下对象,我想对相同成分名称的值求和,例如:番茄:5,鸡肉:5,大米:1,豌 bean :1,我有这个代码,但没有求和,相反,显示所有对象

var data3 = {
  "menus": [{
    "recipe": "chicken with rice",
    "ingredients": [{
      "name": "tomato",
      "value": 2
    }, {
      "name": "chicken",
      "value": 3
    }, {
      "name": "rice",
      "value": 1
    }]
  }, {
    "recipe": "Garden rice",
    "ingredients": [{
      "name": "tomato",
      "value": 3
    }, {
      "name": "chicken",
      "value": 2
    }, {
      "name": "peas",
      "value": 1
    }]
  }]
};

var ingredients;

for (var i = 0; i < 10; i++) {
  ingredients = data3.menus[i].ingredients;

  var temp = {};
  var obj = null;
  for (var j = 0; j < ingredients.length; j++) {
    obj = ingredients[j];

    if (!temp[obj.name]) {
      temp[obj.name] = obj;
    } else {
      temp[obj.name].value += obj.value;
    }

  }
  var result = [];
  for (var prop in temp)
     result.push(temp[prop]);

  console.log(result);

};

非常感谢您的帮助,谢谢!

最佳答案

您可以使用包含成分名称的哈希表,如果属性不存在,则使用默认值零。然后添加值。

var data3 = { menus: [{ recipe: "chicken with rice", ingredients: [{ name: "tomato", value: 2 }, { name: "chicken", value: 3 }, { name: "rice", value: 1 }] }, { recipe: "Garden rice", ingredients: [{ name: "tomato", value: 3 }, { name: "chicken", value: 2 }, { name: "peas", value: 1 }] }] },
    ingredients = Object.create(null);

data3.menus.forEach(function (a) {
    a.ingredients.forEach(function (b) {
        ingredients[b.name] = (ingredients[b.name] || 0) + b.value;
    });
});

console.log(ingredients);

关于Javascript对象相同属性键的总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376429/

相关文章:

javascript - 如何创建一个使用 lit-element 将项目推送到空数组的方法

javascript - 列 Bootstrap

javascript 验证 css

javascript - 如何: On keypress get textarea1 height and set height to textarea2

javascript - TinyMCE 获取所有编辑器和设置

javascript - 使用 Axios 与 jQuery 进行 HTTP 请求有什么区别?

javascript - ag-grid 保持排序图标可见

javascript - AngularJS:使用 $broadcast 显示警报

javascript - 我想从这个站点复制元素的响应行为,如何进行?

javascript - 如何在chrome开发者控制台中查看在DOJO中创建的单例对象?