使用Lodash合并多个数组并生成无重复值的单个数组
合并多数组并提取唯一值的解决方案
嘿,这个需求在日常开发里挺常见的,我给你分享几种JavaScript实现方案,都能精准得到你想要的结果:
方法1:ES6 Set + flat(最简洁高效)
利用ES6的Set结构天然去重的特性,配合数组的flat()方法先把多维数组拍平,一步就能搞定:
// 你的原始数组集合 const sourceArrays = [ ["General Fitness", "Health & Fitness"], ["Cardiovascular", "Meditation"], ["Health & Fitness", "Cardiovascular", "General Fitness"], ["Cardiovascular"] ]; // 生成唯一值数组 const uniqueResult = [...new Set(sourceArrays.flat())]; console.log(uniqueResult); // 输出:["General Fitness", "Health & Fitness", "Cardiovascular", "Meditation"]
解释:
sourceArrays.flat():把嵌套的子数组全部合并成一个一维数组;new Set(...):将一维数组转换为Set结构,自动剔除重复值;[...Set]:用扩展运算符把Set转回普通数组,得到最终结果。
方法2:手动遍历去重(兼容旧环境)
如果需要兼容不支持ES6语法的旧浏览器,可以用reduce配合includes手动判断去重:
const sourceArrays = [ ["General Fitness", "Health & Fitness"], ["Cardiovascular", "Meditation"], ["Health & Fitness", "Cardiovascular", "General Fitness"], ["Cardiovascular"] ]; const uniqueResult = sourceArrays.reduce((accumulator, currentArray) => { currentArray.forEach(item => { // 检查当前元素是否已在结果数组中,不存在则添加 if (!accumulator.includes(item)) { accumulator.push(item); } }); return accumulator; }, []); // 初始化结果数组为空 console.log(uniqueResult); // 同样输出目标数组
小补充
如果你的数组嵌套层级更深(比如三维数组),可以给flat()传参数Infinity,比如sourceArrays.flat(Infinity),就能一次性拍平所有层级的数组。
内容的提问来源于stack exchange,提问作者Saad Ahmed
相关产品推荐
相关产品推荐

