javascript - 是否可以用reduce代替filter和map?

标签 javascript reactjs ecmascript-6 reducers

我从对象数组中更改了一个对象两次,以便在第一次迭代中过滤掉一些对象,在第二次迭代中我使用 map 更改每个过滤后的对象。我可以使用 reducer 或更好的东西吗?

  const originalTree = html.parse(text);

  if (originalTree[0].type === 'text') {
    return text;
  }
  const result = originalTree
    .map((obj) => ({
      ...obj,
      children: obj.children.filter((el) => el.name !== 'style'),
    }))
    .map((obj) => ({
      ...obj,
      children: obj.children.map(function(child) {
        child.attrs = {};
        return child;
      }),
    }));

  return html.stringify(result);
}

最佳答案

这是一种使用一个 originalTree.map() 进行循环的方法,同时还将 children.filter().map() 链简化为 children.flatMap()调用:

const result = originalTree.map(
  obj => ({
    ...obj,
    children: obj.children.flatMap(
      el => el.name !== 'style'
        ? [{ ...el, attrs: {} }]
        : []
    )
  })
);

如果您想继续在 obj.children 上分别使用 filter()map(),我建议至少添加 attrs 不变,而不是修改现有引用:

const result = originalTree.map(
  obj => ({
    ...obj,
    children: obj.children.filter(
      el => el.name !== 'style'
    ).map(
      child => ({ ...child, attrs: {} })
    )
  })
);

关于javascript - 是否可以用reduce代替filter和map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59844649/

相关文章:

javascript - 单击时使用 javascript 添加内容

javascript - Canvas JS 图表不适用于大数据和小数据

javascript - React 不能很好地接受 td colSpan 属性

node.js - 返回方法中仅显示未定义。如何获取回调?

javascript - ES6 更改对象值简写

javascript - Django + Vue.js 问题

javascript - 鼠标移开时返回原始图像源

javascript - 在不循环的情况下查询 Firestore 集合中的所有文档

javascript - 将 promise polyfill 添加到 ES6

mysql - 如何编写多行sql查询(nodejs)