这里提供了两种数组去重的方法,仅供参考。
1 function unique(arr){ 2 var isRepeated, result = []; 3 for(var i=0; i<arr.length; i++){ 4 isRepeated = false; 5 for(var j=0; j<result.length; j++){ 6 if(arr[i] === result[j]){ 7 isRepeated = true; 8 break; 9 } 10 } 11 if(!isRepeated){ 12 result.push(arr[i]); 13 } 14 } 15 return result; 16 } 17 var arr = [1,2,3,4,3,2,1,2,3]; 18 console.log(unique(arr)); // [1, 2, 3, 4]
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是【唯一】的,没有重复的值。
看下面的代码:
1 function uniqueSet(arr){ 2 return [...new Set(arr)]; // 返回的是set数组结构 3 } 4 var repeatArr = [1,2,3,4,3,2,1,2,3]; 5 console.log(uniqueSet(repeatArr)); // [1, 2, 3, 4]
其中的...用于取出参数对象的所有可遍历属性,拷贝到当前对象中。
Array.from方法可以将Set结果转换成数组结构,看下面的代码:
1 var set = new Set([1,2,3,2,1]); 2 console.log(Array.from(set)); //[1, 2, 3]
这就给我们提供了另外一种去除数组重复元素的方法:
1 function unique2(arr){ 2 return Array.from(new Set(arr)); 3 } 4 var arr = [1,2,3,4,3,2,1,2,3]; 5 console.log(unique2(arr)); // [1, 2, 3, 4]