方法一
利用 ES6 新增的 Set 对象。
它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
可以利用 Set 进行数组的去重, 并集, 交集,和差集。
//利用 set 求 数组的差集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
//利用 set 求 数组的并集
var a = [1, 2, 3]
var b = [4, 3, 2]
function arr(arr1,arr2) {
return [...new Set([...a, ...b]) ]
}
console.log(arr(a,b)) // [1, 2, 3, 4]
方法二
利用双层循环的方法来去重
通过for
嵌套双层循环 利用数组的每一项与数组中全部项对比找出相同项。
for
嵌套 for
,然后通过 push
将不同的元素添加到新数组
var array = [1, 1, '1', '1']
// 如果array[i]是唯一的,那么执行完循环,将array[i]添加到res中
function unique(array) {
var res = []
for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
for (var j = 0, resLen = res.length; j < resLen; j++ ) {
if (array[i] === res[j]) {
break;
}
}
if (j === resLen) {
res.push(array[i])
}
}
return res
}
console.log(unique(array)); // [1, "1"]
通过for
嵌套for
,将数组的每一项与数组中全部项对比然后通过 splice()
删除重复项
var arr =
[1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]
function unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1)
j--
}
}
}
return arr
}
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]
通过for
循环数组中元素, 如果 indexOf
检测出 数组 res 中没有该项则添加到数组 res 中
var array = [1, 1, '1']
function unique(array){
var res = []
for(var i=0, len=array.length; i<len; i++){
var ite = array[i]
if(res.indexOf(ite) === -1){
res.push(ite)
}
}
return res
}
console.log(unique(array))
使用 sort
方法排序后,判断当前元素与上一个元素是否相同,删除相同项去重
var array = [1, 1, '1'];
function unique(array) {
var res = []
var sortedArray = array.concat().sort()
var seen;
for (var i = 0, len = sortedArray.length; i < len; i++) {
// 如果是第一个元素或者相邻的元素不相同
if (!i || seen !== sortedArray[i]) {
res.push(sortedArray[i])
}
seen = sortedArray[i];
}
return res;
}
console.log(unique(array));
使用 filter
和 indexOf
来简化循环
var array = [1, 1, '1'];
function unique(array){
var res = [];
array.filter((item,index,array) => {
if(res.indexOf(array[index]) === -1){
res.push(array[index])
}
})
return res
}
console.log(unique(array))
网友评论