在数组中累加值而不减少为单个值
Accumulate values in array without reducing into single value
我想用我的数组中的值做一些与 reduce
非常相似的事情,但我不想将它全部加起来成为一个值。我想进行求和值并将增量插入到数组中的每个连续值中。
像这样:
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }]
// Do something like this
const newArray = array.reduce((accumulated, item) => {
return {
number: (100 / item.number) + accumulated.value || 0,
value: ((100 / item.number) + accumulated.value || 0) * item.value
}
}, 0)
// But the result should be something like this
newArray = [{ number: 6, value: 10 }, { number: 30, value: 360 }, { ...and so on }]
如何实现? ES6 with/without 首选 lodash。
由于输入和输出项是一对一的,我认为使用 .map
比 .reduce
更直观 - 您可以为返回的最后一个对象保留一个外部变量。
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }]
let lastReturn = array.shift();
const newArray = [lastReturn].concat(array.map(({ number, value }) => {
const newObj = {
number: (100 / number) + lastReturn.value || 0,
value: ((100 / number) + lastReturn.value || 0) * value
};
lastReturn = newObj;
return newObj;
}));
console.log(newArray);
虽然技术上 可能 为此使用 .reduce
(您可以使用 .reduce
来实现与数组迭代相关的任何事情,.map
在这里更有意义。
我想用我的数组中的值做一些与 reduce
非常相似的事情,但我不想将它全部加起来成为一个值。我想进行求和值并将增量插入到数组中的每个连续值中。
像这样:
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }]
// Do something like this
const newArray = array.reduce((accumulated, item) => {
return {
number: (100 / item.number) + accumulated.value || 0,
value: ((100 / item.number) + accumulated.value || 0) * item.value
}
}, 0)
// But the result should be something like this
newArray = [{ number: 6, value: 10 }, { number: 30, value: 360 }, { ...and so on }]
如何实现? ES6 with/without 首选 lodash。
由于输入和输出项是一对一的,我认为使用 .map
比 .reduce
更直观 - 您可以为返回的最后一个对象保留一个外部变量。
const array = [{ number: 6, value: 10 }, { number: 5, value: 12 }, { number: 2, value: 5 }]
let lastReturn = array.shift();
const newArray = [lastReturn].concat(array.map(({ number, value }) => {
const newObj = {
number: (100 / number) + lastReturn.value || 0,
value: ((100 / number) + lastReturn.value || 0) * value
};
lastReturn = newObj;
return newObj;
}));
console.log(newArray);
虽然技术上 可能 为此使用 .reduce
(您可以使用 .reduce
来实现与数组迭代相关的任何事情,.map
在这里更有意义。