javascript - 在 JavaScript 数组中按日期组合类似对象

标签 javascript arrays

我有以下数组:

var objArray = [
    { num: 1, date: '1/12/2017' },
    { num: 3, date: '1/12/2017' },
    { num: 7, date: '1/12/2017' },
    { num: 1, date: '1/13/2018' },
    { num: 3, date: '1/16/2018' },
    { num: 4, date: '1/16/2018' }
   ];

我想将具有相同日期的那些组合起来,以便输出数组如下所示:

var outputArr = [
    { num: 11, date: '1/12/2017' },
    { num: 1,  date: '1/13/2018' },
    { num: 7,  date: '1/16/2018' }
   ];

我将添加具有相似日期的所有 num 并创建一个新对象。

我有一个非常大的对象数据集,所以我正在努力减少处理时间。

我已将数组按日期排序,以便它反射(reflect) objArray

For 循环看起来很麻烦,因为我使用数组中的第一个日期并检查数组中的每个其他元素,如下面的伪代码:

var newArr = [];
for(i = 0; i < objArray.length; i++) {
    for(j = 0; j < objArray.length; j++) {
        var tempArr = [];
        // check every date manually
        // add similar to new array
        tempArr.push({ similar items });
    }
    newArr.push(tempArr):
}

// Do another couple loops to combine those like arrays into another array    

必须有一种比运行多个 for 循环更优雅的方式来执行此操作。

如有任何建议,我们将不胜感激。

最佳答案

只需使用 Array.reduce() 创建 map 并按日期对值进行分组, map 上的 Object.values() 将为您提供所需的输出值:

let arr = [ { num: 1, date: '1/12/2017' }, { num: 3, date: '1/12/2017' }, { num: 7, date: '1/12/2017' }, { num: 1, date: '1/13/2018' }, { num: 3, date: '1/16/2018' }, { num: 4, date: '1/16/2018' } ];
   
let result = Object.values(arr.reduce((a, {num, date})=>{
  if(!a[date])
    a[date] = Object.assign({},{num, date});
   else
    a[date].num += num;
  return a;
 },{}));
 console.log(result);

关于javascript - 在 JavaScript 数组中按日期组合类似对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936130/

相关文章:

javascript - 如何检查句号 (.) 是否从 jQuery 文本框中的单词中删除?

java - 通过用户输入将某个对象保存在数组中

java - 从方法调用 JLabel

php数组组合

javascript - 如何使用 IndexString 对 Javascript 数组进行排序,例如 : a ['String' ]

javascript - 使用 Lodash 查找 [] 数组内 JSON 数组的索引

javascript - 如何在javascript中自动选择下拉列表中的项目

javascript - 如何在 Chrome 开发者工具中禁用 JavaScript?

JavaScript - 数组值空白

javascript - dojo.data.objectStore.deleteItem