整理一下JavaScript中几种数组去重的方法吧!

不管哪种去重方法,必然避免不了一个原数组和一个新数组的变量,就提前定义吧。

var arr1 = [2, 0, 23, 13, 5, 13, 2, 23];
var arrnew = [];

第一种:纯粹循环的方法

for (var i = 0; i < arr1.length; i++) {
    var flag = true;      // 定义一个标签
    for (var j = i+1; j < arr1.length; j++) {
        if (arr1[i] == arr1[j]) {
            flag = false;
            break;
        }
    }
    if(flag) arrnew.push(arr1[i])
}
console.log(arrnew)

第二种:利用javascript内建函数indexOf

for (var i = 0; i < arr1.length; i++) {
    if (arrnew.indexOf(arr1[i]) == -1)
    arrnew.push(arr1[i])
}
console.log(arrnew)

第三种:其实有点类似于第二种方法,先对arr1进行排序,然后用新数组中的最后一个值,与排序后的arr1逐个比较,如果不等,则赋值给arrnew

arr1.sort(function (a, b) {
    return a - b;
});
 
 
for (var i = 0; i < arr1.length; i++) {
    if (arr1[i] != arrnew[arrnew.length -1]) {
        arrnew.push(arr1[i])
    }
}
console.log(arrnew)

第四种:利用对象

var hash = {};
arr1.forEach(function (item, index) {
    if (!hash[item]){
        hash[item] = item;
        arrnew.push(item)
    }
})
console.log(arrnew)

这里会存在一个问题,如果数组本身存在相同的fathy的值的话,这相同的fathy的值,在这种方法下面,就无法去重,如存在两个false, 两个0, 两个null,两个undefined类似这种falthy值,该方法是无法实现该类值的去重的。

 

第五种:利用ES6提供的Set数据格式

arrnew = [...new Set(arr1)];
console.log(arrnew)

  

posted on 2017-06-09 08:27  烛火星光  阅读(198)  评论(0编辑  收藏  举报