【问题标题】:Sum of array items数组项的总和
【发布时间】:2021-05-25 08:18:18
【问题描述】:

我正在开发 React 项目,我正在使用 ReduxHooks。我有问题,浪费了 2 天。 我有这个来自状态的数组:

Array = [
{value: 0, id: 161435}
{value: 1, id: 161435}
{value: 2, id: 161435}
{value: 3, id: 161435}
{value: 4, id: 161435}
,
{value: 1, id: 161434}
{value: 2, id: 161434}
{value: 3, id: 161434}
{value: 4, id: 161434}
{value: 5, id: 161434}
]

我想要这样的结果

[{value:10,id:161435},{value:14,id:161434}]

我试过array.reduce,但还是不行。

谁能帮我解决这个问题?

【问题讨论】:

    标签: arrays redux react-redux react-hooks


    【解决方案1】:

    不要使用reduce,而是这样做:

    const arr = [
      {value: 0, id: 161435},
      {value: 1, id: 161435},
      {value: 2, id: 161435},
      {value: 3, id: 161435},
      {value: 4, id: 161435},
      {value: 1, id: 161434},
      {value: 2, id: 161434},
      {value: 3, id: 161434},
      {value: 4, id: 161434},
      {value: 5, id: 161434},
    ];
    
    const valueSumById = {};
    for (const { value, id } of arr) {
      valueSumById[id] = (valueSumById[id] || 0) + value;
    }
    
    const result = Object
      .entries(valueSumById)
      .map(([id, value]) => ({ id, value }));
    
    console.log(result);

    【讨论】:

    • 我已经尝试过,但如果出现此错误:元素隐式具有“任何”类型,因为“任何”类型的表达式不能用于索引类型“{}”
    • 哦,你没有准确地说是打字稿。然后将const valueSumById = {}; 替换为const valueSumById: Record<string, number> = {};
    • 感谢您的帮助
    【解决方案2】:

    const allObj = [
      {value: 0, id: 161435},
      {value: 1, id: 161435},
      {value: 2, id: 161435},
      {value: 3, id: 161435},
      {value: 4, id: 161435},
      {value: 1, id: 161434},
      {value: 2, id: 161434},
      {value: 3, id: 161434},
      {value: 4, id: 161434},
      {value: 5, id: 161434}
    ]
    
     const total = []
    
    
       allObj.map((obj) => {
         const theIndex = total.findIndex(item => item.id === obj.id);
         if( theIndex === -1){
         total.push(obj)
       } else {
        total[theIndex].value += obj.value;
         }
       });
    
    console.log(total) // [ { value: 10, id: 161435 }, { value: 15, id: 161434 }]

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2013-02-04
      • 2014-12-04
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多