整理一下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)