js数组去重的多种方法

方法1,使用for遍历,判断数组内元素是否相等

var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
var arr2 = []
arr2.push(...arr1)
function removeDuplicatedItem(arr) {
    for (var i = 0; i < arr.length - 1; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1); 
                j--;
            }
        }
     return arr;
}
arr2 = removeDuplicatedItem(arr2);
console.log(arr1,arr1.length);  // [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
console.log(arr2,arr2.length);  // [1, 23, 3, 5, 6, 7, 9, 8]

方法2,借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5];
var arr2 = []
arr2.push(...arr1)
function removeDuplicatedItem(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) != i) {
            arr.splice(i, 1); //删除数组元素后数组长度减1后面的元素前移
            i--; //数组下标回退
         }
     }
     return arr;
}
arr2 = removeDuplicatedItem(arr2);
console.log(arr1);  // [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
console.log(arr2);  // [1, 23, 3, 5, 6, 7, 9, 8]

方法3,使用filter过滤

var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5];
var arr2 = [];
arr2.push(...arr1);
arr2 = arr2.filter(function(element, index, self) {
    return self.indexOf(element) === index;
});
console.log(arr1);  // [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
console.log(arr2);  //  [1, 23, 3, 5, 6, 7, 9, 8]

方法四,借助新数组,通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等则添加到新数组中

var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5];
var arr2 = [];
arr2.push(...arr1);
function removeDuplicatedItem(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) == i) {
            ret.push(arr[i]);
        }
     }
     return ret;
 }
arr2 = removeDuplicatedItem(arr1);
console.log(arr1);  // [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
console.log(arr2);  // [1, 23, 3, 5, 6, 7, 9, 8]

方法五,利用空对象来记录新数组中已经存储过的元素

var arr1 = [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5];
var arr2 = [];
var o = {};
for (let i = 0; i < arr1.length; i++) {
    let k = arr1[i];
    if (!o[k]) {
        o[k] = true;
        arr2.push(k);
    }
}
console.log(arr1); // [1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5]
console.log(arr2); // [1, 23, 3, 5, 6, 7, 9, 8]3, 3, 5, 6, 7, 9, 8]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值