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

How to group array elements by arbitrary set of keys?

本文关键字:数组元素 何通过 任意一      更新时间:2023-09-26

有一个对象数组,我想通过组合不同的键集来求和值。更具体地说,有一个对象数组,描述一顿饭(0 -早餐,1 -小吃…),我想做两个不同的和:

  • 每餐营养价值总和(数量)
  • 总营养价值(量)

对象数组的示例如下:

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>