数组API

数组去重

新开一个数组的方式

新开一个数组,遍历原数组,每次遍历时判断当前项是否已经在新数组中,那不在就push加到新数组中;已经存在就什么都不做,就不push了。

let arr=[23,56,78,36,36,78,23,11,89];
let newArr=[];
for(let i=0;i<arr.length;i++){
    if(!newArr.includes(arr[i])){
        newArr.push(arr[i]);
    }
}
newArr=[];
arr.forEach(item=>{
    // 因为这是一个方法,不是一个循环
    // 要使用return不能使用continue/break
    // 函数体中遇到return下面代码不再执行
    if(newArr.includes(item)) return;
    newArr.push(item);
})
console.log(newArr);


删掉重复的

循环原数组,把每一项拿出来,跟它后面的比较,遇到相同的则删除。但删除的时候一定要注意数组塌陷问题。

!!!

边循环边删除的时候,容易有数组塌陷问题:

前面的元素被删除了,所以后面的元素的索引都自动往前移了一位

从数组中任意一个位置移除某一项:splice

let arr=[23,56,78,36,36,78,23,11,89,78,78];
for(let i=0;i<arr.length;i++){
    for(let j=i+1;j<arr.length;j++){
        if(arr[j]===arr[i]){
            arr.splice(j,1);
            j--;
        }
    }
}
console.log(arr);


对象法

let arr=[23,56,78,36,36,78,23,11,89,78,78];
let obj={}
newArr=[];
for(let i=0;i<arr.length;i++){
    if(!obj[arr[i]]){
        newArr.push(arr[i]);
        obj[arr[i]]=1;
    }
}
console.log(newArr);


这里有一点要注意的:基于splice实现删除性能不太好,因为所有后面的元素都要往前挪一位

方案:把最后一项替换当前这一项,然后把最后一项删掉

封装成unique方法

比较新颖的正则的方法

let arr=[23,56,78,36,36,78,23,11,89,78,78];
arr.sort((a,b)=>a-b);
let str=arr.join('|')+'|';
console.log(str);
// let reg=/([0-9]*\|)(?=(\1))/g
let reg=/([0-9]*\|)(\1)*/g
// 用后行断言的时候不好用分组
// let reg=/(?<=\1)([0-9]*\|)/g
console.log(str.match(reg));
console.log('---替换---')
let newArr=[];
str=str.replace(reg,(_,match1)=>{
    let num=Number(match1.slice(0,match1.length-1))
    newArr.push(num);
    return match1;
})
console.log(str);
console.log(newArr);


set集合的方法

9b987ce1eac6ad05bd874ab5edaf4dc8.png

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐