使用这样的数组并使用每个数字创建一个新数组,可以像这样完成前面数字的总和:
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))));
答案 0 :(得分:3)
使用Array.map()
迭代数组。使用Object.entries()
从对象中获取键/值对,使用Array.reduce()
迭代对,并使用total
作为值重建对象。
注意:迭代顺序可能会根据traversal order of object properties in 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);
答案 1 :(得分:1)
也许你可以试试这个:
var total = 0;
var array =[{ val1: 1, val2: 2, val3: 3, val4: 4 }]
array.map(element => Object.keys(element).map(k => {
total += element[k];
element[k] = total;
}));
console.log(array);

它将遍历数组并对所有对象属性进行sumarize。
答案 2 :(得分:1)
迭代对象的标准方法是使用Object.keys
数组
构建累积对象的方法是Array.reduce
。
var numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }];
var total = 0;
var mapped = Object.keys(numbers[0]).reduce((acc, key) => (acc[key] = total+=numbers[0][key], acc), {});
console.log(mapped);
答案 3 :(得分:1)
您可以映射单个对象,并通过在总和上使用闭包来分配键/值对。
var numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }],
result = numbers.map(o =>
Object.assign(...Object.entries(o).map((s => ([k, v]) => ({ [k]: s += v}))(0))));
console.log(result);