一、普通数组去重
Set方法
// 1. Set
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = [...new Set(arr)]
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/10e7b03244597c0ab2a8678b282a7f41.png)
filter + indexOf
// 2. filter + indexOf
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index)
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/e1de27aab4828b80da1bcd573d388bb6.png)
reduce
// 3. reduce
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], [])
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/8fee918cde7b6abe42a15b544f758938.png)
Map
// 4. Map
let arr = [1, 2, 3, 3, 4, 4, 5]
let map = new Map()
let uniqueArr = []
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], true)
uniqueArr.push(arr[i])
}
}
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/9e057d0c0dcff5635bfc73c4f5c12fc4.png)
Object
// 5. Object
let arr = [1, 2, 3, 3, 4, 4, 5]
let obj = {}
let uniqueArr = []
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = true
uniqueArr.push(arr[i])
}
}
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/dae7750a6558547c126a9e553aea89d1.png)
6. ES6 includes + forEach
// 6. ES6 includes + forEach
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = []
arr.forEach(item => {
if (!uniqueArr.includes(item)) {
uniqueArr.push(item)
}
})
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/d8d82bc29d30eea8bc6aca5dfa2aa84d.png)
7. ES6 from + Set
// 7. ES6 from + Set
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = Array.from(new Set(arr))
console.log(uniqueArr)
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/b03ce729a8dc3efbaa79538e50a33a08.png)
8.使用双重for+splice对数组去重
这个方式会改变原数组
function removeDuplicates (arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
j--
}
}
}
console.log(arr)
}
removeDuplicates([1, 2, 2, 3, 3, 1, 5, 2, 4])
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/3a4ad921e127827144063acbb0a44d3e.png)
9.使用双重for+push对数组去重
这种方式不会改变原数组
function removeDuplicates (arr) {
let result = []
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
j = ++i
}
}
result.push(arr[i])
}
console.log(result)
}
removeDuplicates([1, 2, 2, 3, 3, 1, 5, 2, 4])
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/3457707433b9204ddadc411e779d2606.png)
二、对象数组去重
1.数组里面的对象只有一个参数,如何去重?
let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
![](https://img-blog.csdnimg.cn/img_convert/8345b8582eb6d4b76a8ac4babccfdc30.png)
let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i].name === arr[j].name) {
arr.splice(j, 1)
j--
}
}
}
console.log(arr)
还是for循环比较实用
使用splice会改变原数组
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/927c4e2b52dac7ba8ff0b3441e174ed1.png)
2.使用双重for+push,对象数组去重。
let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
let result = []
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i].name === arr[j].name) {
j = ++i
}
}
result.push(arr[i])
}
console.log(result)
输出结果:
这个不会改变原数组
![](https://img-blog.csdnimg.cn/img_convert/9eabae7d99d0c20206e48f3ae38c914d.png)
3.现在有一个需求:一个数组对象里的每一项有name,age两个键,另一项的name,age的值相同的话,只保留一项。
let arr = [{ name: 'zs', age: 18 }, { name: 'ls', age: 19 }, { name: 'zs', age: 20 }, { name: 'zs', age: 18 }]
![](https://img-blog.csdnimg.cn/img_convert/871510a4c5f354553fc27a359b8af5f6.png)
例如第一项跟第四项的name,age的值都一样,就只保留一个。
这种方式不会改变原数组。
![](https://img-blog.csdnimg.cn/img_convert/1d63c43d39a3dd0cd68f0bc08100ab93.png)
4.使用双重for+splice
let arr = [{ name: 'zs', age: 18 }, { name: 'ls', age: 19 }, { name: 'zs', age: 20 }, { name: 'zs', age: 18 }]
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i].name === arr[j].name && arr[i].age === arr[j].age) {
arr.splice(j, 1)
j--
}
}
}
console.log(arr)
这种方式会改变原数组。
输出结果:
![](https://img-blog.csdnimg.cn/img_convert/404eb7f1da998dd3932aa11087164b08.png)