如何对JavaScript对象数组去重并移除指定子串元素,可否异步一行实现
实现代码
同步最优实现(推荐)
该场景为纯内存计算,本身不需要异步逻辑,同步写法性能更高,单句即可完成:
const res = [...new Set(arr.filter(i => !i.Element.includes('mhh.chs.com')).map(i => i.Element))].map(e => ({Element: e}))
异步单句实现(满足异步格式要求)
如果必须用异步写法,直接用Promise包装同步逻辑即可,同样单句完成:
const asyncRes = await Promise.resolve([...new Set(arr.filter(i => !i.Element.includes('mhh.chs.com')).map(i => i.Element))].map(e => ({Element: e})))
逻辑说明
- 时间复杂度为O(n),属于最优效率方案:先单次遍历过滤掉所有含
mhh.chs.com的元素,提取邮箱值存入Set完成去重,最后重新组装为原对象结构,无需多次遍历数组 - 同步方案没有异步开销,性能优于异步包装的版本,除非你需要将该逻辑放入微任务队列执行,否则优先用同步版本
- 最终输出结果为:
[{"Element":"email@gmail.com"},{"Element":"email2@yahoo.com"}],完全符合要求
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

