我从对象数组中更改了一个对象两次,以便在第一次迭代中过滤掉一些对象,在第二次迭代中我使用 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/