js 数组去重和扁平方法

// 实现多种数组去重方法
const arr = [1, 2, 2, 3, 4, 4, 5, 'a', 'a', 'b'];

// 方法1:使用 Set
console.log([...new Set(arr)])
// 方法2:使用 filter + indexOf

let newArr=arr.filter((item,index)=>{
    return arr.indexOf(item)===index
})
console.log(newArr);
// 方法3:使用 reduce
newArr=arr.reduce((prev,next)=>{
    if(!prev.includes(next)){
        prev.push(next);
    }
    return prev;
},[])
console.log(newArr);
// 方法4:对象属性去重
const newObj={}
arr.map(item=>{
    newObj[item]=item;
})
console.log(Object.values(newObj))
// 实现数组扁平化(多种方法)
const nestedArray = [1, [2, [3, [4]], 5]];

// 期望输出:[1, 2, 3, 4, 5]
    
// 方法1:递归
function arrFlat(arr){
    const newArr=[];
    function flat(arr){
        arr.forEach(element => {
            if(Array.isArray(element)){
                flat(element);
            }else{
                newArr.push(element);
            }
        });
    }
    flat(arr);
    return newArr;
}

console.log(arrFlat(nestedArray))
// 方法2:使用 flat 方法
console.log(nestedArray.flat(4))
// 方法3:使用 reduce
function reduceFlat(arr){
   return arr.reduce((prev, current) => {
    // 核心:如果当前元素是数组,递归扁平化后合并;否则直接添加
    return prev.concat(Array.isArray(current) ? reduceFlat(current) : current);
  }, []); // 初始化累加器为空数组
}
console.log(reduceFlat(nestedArray))
// 方法4:使用扩展运算符

 

posted @ 2025-12-26 16:31  howhy  阅读(4)  评论(0)    收藏  举报