【问题标题】:Return array of objects matching object.date and summing object.value [closed]返回匹配object.date和求和object.value的对象数组[关闭]
【发布时间】:2018-09-05 08:02:58
【问题描述】:

返回匹配 object.date 和求和 object.value 的对象数组

[

【问题讨论】:

  • 你的问题是什么?

标签: javascript reactjs ecmascript-6


【解决方案1】:

要对按日期分组的值求和,您可以使用中间对象作为地图,然后对每个日期求和:

function sumValuesGroupByDate(input) {
  var dates = {};
  input.forEach(dv => dates[dv.date] = ((dates[dv.date] || 0) + dv.value));
  return Object.keys(dates).map(date => ({date, value: dates[date]}));
}

var input = [
  {date: "2017-07-10", value: 1}, {date: "2017-07-11", value: 3},
  {date: "2017-07-10", value: 5}, {date: "2017-07-11", value: 7}
];
console.log(sumValuesGroupByDate(input));


如果您喜欢单行的原始 ES6 JavaScript 功能,那就是:

function sumValuesGroupByDate(input) {
  return Object.entries(input.reduce((dvs, {date: d, value: v}) => ({...dvs, [d]: (dvs[d] || 0) + v}), {})).map(([date, value]) => ({date, value}));
}

var input = [
  {date: "2017-07-10", value: 1}, {date: "2017-07-11", value: 3},
  {date: "2017-07-10", value: 5}, {date: "2017-07-11", value: 7}
];
console.log(sumValuesGroupByDate(input));

【讨论】:

  • 很棒的答案!谢谢
【解决方案2】:

返回匹配日期值的对象数组:

const resultArray = array.filter(arrayItem => arrayItem.date === dateValue);

返回值的总和

const reducer = (summedValue, value) => summedValue + value;
const sum = array.reduce(reducer));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多