gpt4 book ai didi

javascript - 使用 reduce 改变数组项。坏模式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:55 24 4
gpt4 key购买 nike

我有一个关于在 Javascript 中正确使用 Array.reduce 的问题。假设我有一个包含一些像这样的简单对象的数组:

let values = [{value: 2}, {value: 3}, {value: 8}, {value: 11}];

而且我想为每个对象添加一个“diff”属性,以计算当前项目值和前一个项目值之间的差异。我想要这样的东西:

let values = [
{value: 2},
{value: 3, diff: 1},
{value: 8, diff: 5},
{value: 11, diff: 3}
];

为此,我决定使用 Array.reduce 方法。我使用 reduce 是因为我可以访问当前项和最新项,但我对这种情况下的缩减数组不感兴趣。

values.reduce((acc, cur) => {
if (acc.value) {
cur.diff = cur.value - acc.value;
}
return cur;
}, {});

这是 Array.reduce 的一个很好的用法吗?我不喜欢改变原始数组项的方式,但另一方面,reduce 是唯一可以访问前一项的数组方法。在这种情况下,也许简单的 for-of 循​​环应该更好?

谢谢

最佳答案

你可以使用 Array#forEach , 因为您已经拥有对前任的访问权限。

优点是,您没有返回值的开销。

let values = [{ value: 2 }, { value: 3 }, { value: 8 }, { value: 11 }];

values.forEach((a, i, aa) => i && (a.diff = a.value - aa[i - 1].value));

console.log(values);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用 reduce 改变数组项。坏模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42627743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com