Javascript `filter` + `reduce` VS `reduce` + `if`

Ave*_*235 -1 javascript ecmascript-5

Object.entries(obj).reduce((acc, [key, value]) => {
  if (someCondition(key, value)) {
    acc[key] = value;
  }
  return acc;
}, {});


Object.entries(obj)
  .filter(([key, value]) => someCondition(key, value))
  .reduce((acc, [key, value]) => {
    acc[key] = value;
    return acc;
  }, {});
Run Code Online (Sandbox Code Playgroud)

上面两个块做同样的事情:创建一个副本,obj删除一些基于someCondition.

哪种方式是首选,为什么?

hsz*_*hsz 5

这总是取决于。

对于第一种情况 -reduce内部有条件 - 您只需循环一次数据集。

第二种情况为您提供了两个循环(第二个适用于有限的数据集),但代码更具可读性并且操作是分开的(过滤/修改数据)。