工作生活

数组去重的几种方法

2019-07-04  本文已影响0人  LELIN

一、使用 indexOf 方法

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

1、方法一:

let arr1 =  [1,2,1,3,1,5,2,3,6,4,1,2,5,3]

let arr2 = []

for(let i = 0; i < arr1.length ; i++) {

    //通过indexOf判断arr1中当前元素的位置是否与index相等
    if(arr1.indexOf(arr1[i]) === i){

         arr2.push(arr1[i])

    }

}

2、方法二:

let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]

function uniq(arr) {

    let arr2 = []

    for (let i = 0 ; i < arr.length ; i++){

        //判断arr2中是否有当前元素
        if(arr2.indexOf(arr[i]) === -1) {

            arr2.push(arr[i])

        }

    }

    return arr2

}

uniq(arr)

二、使用内置 Array.prototype.filter() 方法

filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。如果没有任何数组元素通过测试,则返回空数组。

let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]

let arr2 = arr.filter((element ,index , self) => {

    return self.indexOf(element) === index

})

console.log(arr2)

三、使用内置 Array.prototype.includes() 方法

includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。对象数组不能使用includes方法来检测。

第一个参数:要搜索的内容
第二个参数:开始位置(大于数组长度时,整个数组不会被搜索,索引位置小于0时,数组每一项都会被搜索)

console.log([1, 2, 3].includes(2));     // true
console.log([1, 2, 3].includes(4));     // false
console.log([1, 2, 3].includes(3, 3));  // false
console.log([1, 2, 3].includes(3, 0)); // true
console.log([1, 2, NaN].includes(NaN)); // true
function uniq(arry){

    var result = [];

    for(var i =0; i < arry.length; i++) {

        if(!result.includes(arry[i])) {

            //如 result 中没有 arry[i],则添加到数组中
            result.push(arry[i]) 

       }

    }

    return console.log(result);

}

uniq([1,2,1,3,1,5,2,3,6,4,1,2,5,3])

四、ES6-Set方法

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set函数可以接受一个数组作为参数,用来初始化。

// 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
let arr = [1,2,1,3,1,5,2,3,6,4,1,2,5,3]

function uniq(ar) {

    return [...new Set(ar)]

}

uniq(arr)

上一篇 下一篇

猜你喜欢

热点阅读