【问题标题】:Add third key to array of objects summing up values of second key将第三个键添加到对象数组中,总结第二个键的值
【发布时间】:2022-09-22 23:42:28
【问题描述】:

我知道这可能是一项容易的任务,尽管我为此付出了很多努力:

我有一个看起来像这样的对象数组:

[{date: \'01-01-2022\' , count: 1},
 {date: \'02-01-2022\' , count: 2},
 {date: \'05-01-2022\' , count: 9}]

我的预期结果是:

[{date: \'01-01-2022\' , count: 1 , sum: 1},
 {date: \'02-01-2022\' , count: 2 , sum: 3},
 {date: \'05-01-2022\' , count: 9 , sum: 12}]

或者:

[{date: \'01-01-2022\' , count: 1},
 {date: \'02-01-2022\' , count: 3},
 {date: \'05-01-2022\' , count: 12}]

我可以总结使用计数数组

    let new_array = [];  
    myarray.reduce( (prev, curr,i) =>  new_array[i] = prev + curr , 0 )
    return (new_array);

但我从来没有设法让它发生在原始对象数组中或将事物添加到原始对象数组中。

先感谢您!

  • 我不确定将运行总和放在数据数组中是正确的方法;如果有任何东西对数组重新排序,那么小计将没有任何意义。虽然我猜只要小计按照日期字段确定的顺序,你就可以了......

标签: javascript arrays sum javascript-objects


【解决方案1】:

如果您想改变原始数组,请不要创建新数组 (let new_array = [];),只需遍历原始数组并将所需的属性添加到每个对象即可。

const input = [{ date: '01-01-2022', count: 1 }, { date: '02-01-2022', count: 2 }, { date: '05-01-2022', count: 9 }]

let sum = 0;
for (const o of input) {
  o.sum = (sum += o.count);
}

console.log(input);

【讨论】:

    【解决方案2】:

    由于您想在原始对象数组中执行此操作,因此这对您的情况有用:

    let myArray = [{date: '01-01-2022' , count: 1},
     {date: '02-01-2022' , count: 2},
     {date: '05-01-2022' , count: 9}];
    
    myArray.map((entry, index, arr) => {
        entry.sum = index? arr[index-1].sum + entry.count : entry.count;
        delete entry.count; // Provides alternative outcome, remove for expected outcome
        return entry;
    });
    
    console.log(myArray);

    【讨论】:

    • 您在这里使用map() 作为forEach,只需使用forEach
    • 我想过使用 forEach。我必须把它放在哪里?
    • 而不是mapmyArray.forEach((entry, index, arr) => {...
    【解决方案3】:

    我们也可以通过地图来实现

       
    
     const input = [
          { date: '01-01-2022', count: 1 },
          { date: '02-01-2022', count: 2 },
          { date: '05-01-2022', count: 9 }
        ]
    
        const fun = (ar)=>{
          var t = 0
          const get = ar.map((e, i)=> {
            t = t+e.count
            const Data = {date : e.date,count : e.count,sum : t}
            return Data
        })
          return get
        }
        console.log(fun(input))

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多