如何使用ES6+语法合并二维数组并去除重复元素
实现方案
最优一行实现(推荐)
ES2019 引入的 flat() 配合 Set 去重可以用最少的代码实现需求,可读性和性能都足够覆盖普通业务场景:
const topicsArrayMergedWithoutDuplicates = [...new Set(mapedTopicsArray.flat())]
逻辑说明:
Array.prototype.flat()默认展开一层嵌套数组,刚好适配你当前的二维数组结构,直接就能把二维数组拍平为['javascript', 'reactjs', 'Java', 'reactjs']Set是ES6引入的内置对象,自身特性就是存储的元素不会重复,传入拍平后的数组会自动剔除重复值- 最后用扩展运算符
...把Set实例转回普通数组即可
如果需要适配更深层级的嵌套数组,给 flat() 传参数 Infinity 就能展开所有层级。
reduce 版本实现(符合你提的reduce实现需求)
如果明确要用reduce实现,逻辑是遍历每个子数组,判断元素是否已经存在于累加结果中,不存在就推入:
const topicsArrayMergedWithoutDuplicates = mapedTopicsArray.reduce((acc, currentSubArray) => { currentSubArray.forEach(item => { if (!acc.includes(item)) acc.push(item) }) return acc }, [])
内容的提问来源于stack exchange,提问作者Cristian Müller
相关产品推荐
相关产品推荐

