数组去重方法总结

178 阅读1分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。

一、普通数组去重

定义一个数组如下:

var arr1 = [0, 1, 1, 2, 3, 4, 4, 5, 6, 6]

1、new Set() 去重

var newArr1 = [...new Set(arr1)]
//或
//var newArr1 = Array.from(new Set(arr1))
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

该方法是最简洁的去重方式,推荐使用。

2、indexOf() 去重

var newArr1 = []
for (var index in arr1) {
   if (newArr1.indexOf(arr1[index]) === -1) {
     newArr1.push(arr1[index])
   }
}
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

3、filter() 去重

var newArr1 = arr1.filter((item, index) => {
   return arr1.indexOf(item) === index
})
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

4、sort() 去重

var arr11 = arr1.sort()
var newArr1 = []
for (var index in arr11) {
   if (arr1[index] !== arr1[index - 1]) {
      newArr1.push(arr1[index])
   }
}
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

对于成员数据乱排的,我们可以先进行排序,再通过前后对比进行去重。

5、双层for循环去重

for (var i = 0; i < arr1.length; i++) {
	for (var j = i + 1; j < arr1.length; j++) {
        if (arr1[i] === arr1[j]) {
          arr1.splice(j, 1)
 		  j--
        }
    }
}
console.log(arr1)// [0, 1, 2, 3, 4, 5, 6]

该方法会改变原数组,不推荐使用。

6、访问对象属性进行去重

var newArr1 = []
var obj = {}
for (var index in arr1) {
   if (!obj[arr1[index]]) {
      newArr1.push(arr1[index])
      obj[arr1[index]] = true
   }
}
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

7、includes() 去重

var newArr1 = []
for (var index in arr1) {
   if (!newArr1.includes(arr1[index])) {
      newArr1.push(arr1[index])
   }
}
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

8、new Map() 去重

var map = new Map()
var newArr1 = []
for (var index in arr1) {
   if (!map.has(arr1[index])) {
      map.set(arr1[index], true)
      newArr1.push(arr1[index])
   }
}
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

9、reduce() 去重

var newArr1 = arr1.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], [])
console.log(newArr1)// [0, 1, 2, 3, 4, 5, 6]

二、对象数组去重

定义一个数组如下:

var arr1 = [{
   name: '海绵宝宝',
   age: 15
}, {
   name: '派大星',
   age: 10
}, {
   name: '派大星',
   age: 10
}, {
   name: '海绵宝宝',
   age: 5
}, {
   name: '蟹老板',
   age: 15
}, {
   name: '蟹老板',
   age: 15
}, {
   name: '蟹老板',
   age: 15
}]

1、 new Set() 去重

const s = new Set()
arr1.forEach(item => {
   s.add(JSON.stringify(item))
})

const newSet = Array.from(s)
// 或
// const newSet = [...s]
var newArr1 = []
for (const item of newSet) {
   newArr1.push(JSON.parse(item))
}
console.log(newArr1)

输出结果如下图所示:

2、indexOf() 去重

var newArr1 = []
var newArr11 = []
for (var index in arr1) {
   if (newArr1.indexOf(JSON.stringify(arr1[index])) === -1) {
      newArr1.push(JSON.stringify(arr1[index]))
      newArr11.push(arr1[index])
   }
}
console.log(newArr11)

3、filter() 去重

var newArr1 = []
var newArr11 = []
arr1.filter((item, index) => {
   if (newArr1.indexOf(JSON.stringify(item)) === -1) {
      newArr1.push(JSON.stringify(item))
      newArr11.push(item)
   }
})
console.log(newArr11)

4、双层for循环去重

for (var i = 0; i < arr1.length; i++) {
   for (var j = i + 1; j < arr1.length; j++) {
      if (JSON.stringify(arr1[i]) === JSON.stringify(arr1[j])) {
         arr1.splice(j, 1)
         j--
      }
   }
}
console.log(arr1)

5、访问对象属性进行去重

var newArr1 = []
var obj = {}
for (var item of arr1) {
   if (!obj[item.name] || !obj[item.age]) {
      newArr1.push(item)
      obj[item.name] = true
      obj[item.age] = true
   }
}
console.log(newArr1)