「这是我参与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)