javascript - 如何通过任意一组键对数组元素进行分组?

标签 javascript arrays

拥有一个对象数组,我想通过组合不同的键集来对值进行求和。更具体地说,有一组对象,描述膳食(0 - 早餐,1 - 小吃...),我想得出两个不同的总和:

  • 每餐的营养值(value)(数量)总和
  • 汇总全天的营养值(value)(数量)

对象数组示例如下:

var arrayIngredients = [{mealNumber: 4, name: "Sugars, total", quantity: 1.4300000000000002}, {mealNumber: 4, name: "Magnesium, Mg", quantity: 14.950000000000001}, {mealNumber: 3, name: "Vitamin A, IU", quantity: 27.9}]

有谁知道对给定键(名称)或多个键(mealNumber、名称)的值求和的最有效方法是什么?

最佳答案

您需要使用Array.prototype.reduce (不需要第三方库)。

运行以下代码片段以获得详细示例:

var arrayIngredients = [{
  mealNumber: 4,
  name: "Sugars, total",
  quantity: 1.4300000000000002
}, {
  mealNumber: 4,
  name: "Magnesium, Mg",
  quantity: 14.950000000000001
}, {
  mealNumber: 3,
  name: "Vitamin A, IU",
  quantity: 27.9
}];

var dayTotals = arrayIngredients.reduce(function(result, next) {
  if (!result.hasOwnProperty(next.name))
    result[next.name] = {
      totalQuantity: 0
    };

  result[next.name].totalQuantity += next.quantity;

  return result;
}, {}); // this empty object is injected as "result" argument 
// in the Array.prototype.reduce callback #1 parameter

document.getElementById("result").textContent = JSON.stringify(dayTotals);
<div id="result"></div>

关于javascript - 如何通过任意一组键对数组元素进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31994129/

相关文章:

c++ - 查找二进制二维数组中的唯一行

arrays - 如何将 ActiveRecord 结果转换为哈希数组

javascript - Google map Places API - 如何使用 Google map 搜索框在多个结果中获取国家/地区、邮政编码、号码、网站 URL

javascript:从一个数组中取出项目并将其放入另一个数组中

javascript - 从数组中删除一个对象,然后更新所有对象的属性

javascript - javascript中查找数组中连续重复项、总结并重申的最简洁方法是什么?

java - 多项选择A、B、C、D、E并一起显示输出

javascript - Bootstrap-Datetimepicker:如何从月份选择器中删除年号

javascript - 有什么好的 javascript eclipse 插件吗?

javascript - 在 ember 路由中使用模型哈希时,模型对象未保留