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]
发布了36 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/uperficialyu/article/details/87934232