【问题标题】:Count double in object and total for each JavaScript每个 JavaScript 的对象和总数都加倍
【发布时间】:2021-08-26 11:21:08
【问题描述】:

我需要一些帮助才能得到每个人的重复计算和总价。我的对象

const obj = [
  {'name':'sven','price':'10'},
  {'name':'jan','price':'12'},
  {'name':'john','price':'5'},
  {'name':'nick','price':'13'},
  {'name':'sven','price':'11'},
  {'name':'jan','price':'7'},
  {'name':'nick','price':'9'},
];

从这个对象中,我从键“名称”开始计数。例如斯文 2,1 月 1 日,约翰 1,尼克 2。 我为此使用此代码

const counts = [];
obj.map((x)=>{ 
  counts[x[0]] = (counts[x[0]] || 0) + 1;
});

现在我还需要与每个人一起保存的关键“价格”总数,但我似乎找不到这样做的方法。

result 应该是一个对象数组,例如

counts = [
  {'person':'sven','count':'2','totalPrice':'21'},
  {'person':'jan','count':'2','totalPrice':'19'}
]

我知道如何获得双倍并且我知道如何计算总数,但不是在同一个循环中并保存为 1 个对象。 如果有人可以帮助我指出正确的方向。

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    这是一个Array.reduce 解决方案,它检查数组是否包含具有相同name 属性的项,如果是,则将其totalPrice 属性增加该项的price 属性并将其count 属性增加1 .

    const arr = [
      {'name':'sven','price':'10'},
      {'name':'jan','price':'12'},
      {'name':'john','price':'5'},
      {'name':'nick','price':'13'},
      {'name':'sven','price':'11'},
      {'name':'jan','price':'7'},
      {'name':'nick','price':'9'},
    ];
    
    const result = arr.reduce((a, b) => {
      const found = a.find(e => e.name == b.name);
      if(found){
        found.totalPrice += +b.price;
        found.count++;
      }else{
        a.push({name:b.name, totalPrice: +b.price, count: 1})
      }
      return a
    }, [])
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2019-08-05
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多