【问题标题】:Merge keys array with values array and sum if same key [closed]将键数组与值数组合并,如果相同的键则求和[关闭]
【发布时间】:2019-05-07 18:06:59
【问题描述】:

所以,我有两个分开的数组,它们总是有相同数量的项目,看起来像这样:

array1 = ["Chicken","Chicken","Beef","Shrimp","Beef","Chicken"]
array2 = [2,3,4,1,3,2]

我怎样才能像这样对所有相应项目的值求和:

Chicken: 7
Beef: 7
Shrimp: 1

干杯

【问题讨论】:

标签: javascript arrays object


【解决方案1】:

你可以试试这个

let array1 =["Chicken","Chicken","Beef","Shrimp","Beef","Chicken"]
let array2 = [2,3,4,1,3,2]

let op = array1.reduce((output,current,index)=>{
    if(output[current]){
      output[current] +=array2[index];
    } else {
      output[current] = array2[index];
    }
    return output;
},{})

console.log(op);

【讨论】:

    【解决方案2】:

    您可以使用.map().reduce() 方法获取结果对象:

    let array1 = ["Chicken", "Chicken", "Beef", "Shrimp", "Beef", "Chicken"];
    let array2 = [2, 3, 4, 1, 3, 2];
    
    let result = array1.map((v, i) => [v, array2[i]])
                       .reduce((r, [k, v]) => (r[k] = (r[k] || 0) + v, r), {});
    
    console.log(result);

    参考资料:

    【讨论】:

      【解决方案3】:

      您可以通过 single Array.reduce:

      做到这一点

      const keys = ["Chicken","Chicken","Beef","Shrimp","Beef","Chicken"]
      const vals = [2,3,4,1,3,2]
      
      console.log(keys.reduce((r,c,i) => 
         (r[keys[i]] = (r[keys[i]] || 0) + vals[i], r), {}))

      或分解且更易读的格式:

      const keys = ["Chicken","Chicken","Beef","Shrimp","Beef","Chicken"]
      const vals = [2,3,4,1,3,2]
      
      const result = keys.reduce((r,c,i) => {
        let key = keys[i]
        r[key] = (r[key] || 0) + vals[i]
        return r
      }, {})
      
      console.log(result)

      【讨论】:

        猜你喜欢
        • 2013-02-01
        • 2021-09-23
        • 1970-01-01
        • 2013-06-11
        • 2021-01-10
        • 1970-01-01
        • 2014-03-12
        • 1970-01-01
        • 2014-02-28
        相关资源
        最近更新 更多