// 实现多种数组去重方法
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:使用扩展运算符