首页 > 解决方案 > 当涉及键值对时,您可以使用 Javascript Array Map 或 Reduce 吗?

问题描述

取一个这样的数字数组并用每个数字创建一个新数组,前面的数字之和可以这样完成:

let numbers = [1, 2, 3, 4]
let total = 0
numbers.map(v => total += v)

// result 
// [1, 3, 6, 10]

如果数组包含具有键/值对的对象,是否有办法使用相同的方法,还是我必须使用不同的方法?

var numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]

结果将是与值相加的相同键。

var numbers = [{ val1: 1, val2: 3, val3: 6, val4: 10 }]

编辑:所有这些答案都在小提琴中起作用,但在我的代码中唯一起作用的是

numbers.map(o => Object.assign(...Object.entries(o).map((s => ([k, v]) => ({ [k]: s += v}))(0))));

标签: javascriptarraysobject

解决方案


用 迭代数组Array.map()。用于Object.entries()从对象中获取键/值对,使用 迭代对,并使用as 值Array.reduce()重建对象。total

注意:迭代顺序可能会根据ES6 中对象属性的遍历顺序而改变。

const numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]
let total = 0
const result = numbers.map(n => Object.entries(n)
  .reduce((r, [k, v]) => {
    total += v;
    r[k] = total;
    return r;
  }, {}));
  
console.log(result);


推荐阅读