我有一个关于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循环应该更好吗?
由于
答案 0 :(得分:5)
您可以使用Array#forEach
,因为您已经可以访问前任。
优点是,您没有返回值的开销。
.as-console-wrapper { max-height: 100% !important; top: 0; }
<meta property="twitter:card" content="summary_large_image"/>
<meta property="twitter:site" content="@abc"/>
<meta property="twitter:title" content="dummy text"/>
<meta property="twitter:description" content="dummy text"/>
<meta property="twitter:url" content="http://example.com/example"/>
<meta property="twitter:image:src" content="http://example.com/wp-content/uploads/2017/03/example.jpg"/>
<meta property="twitter:domain" content="The Example"/>