去重的五种方法:
1. 双重for循环去重
2. ES6 Set去重
3. indexOf去重
4. includes去重
5. filter去重
<script>
//indexOf去重
// function unique(arr) {
// var newArr = [];
// for (var i = 0; i < arr.length; i++)
// if (newArr.indexOf(arr[i]) === -1)
// newArr.push(arr[i]);
// return newArr;
// }
// var demo1 = unique(['green', 'red', 'blue', 'red', 'pink'])
// console.log(demo1);
//使用ES6Set去重 但是Set去重有一个弊端,他无法去重引用类型的数据。比如对象数组。
// function quchong(Arr) {
// const newArr = Array.from(new Set(Arr));
// return newArr;
// }
// var demo2 = quchong(['1', '1', '2', '3', '3', '4', '5', '5', '6']);
// console.log(demo2);
//使用includes去重 去重方法和indexOf去重方法一样
// const quchong1 = (arr) => {
// let newArr = [];
// for (let i = 0; i < arr.length; i++)
// if (!newArr.includes(arr[i])) newArr.push(arr[i]);
// return newArr;
// }
// var demo3 = quchong1(['green', 'red', 'blue', 'red', 'pink'])
// console.log(demo3);
//使用filter去重 使用filter配合indexOf()进行的去重过程
const quchong2 = (arr) =>
arr.filter((item, index) => arr.indexOf(item, 0) === index);
var demo4 = quchong2(['1', '1', '2', '3', '3', '4', '5', '5', '6']);
console.log(demo4);
//使用双重for循环去重
const quchong3 = (arr) => {
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
i--;
}
}
}
return arr;
}
var demo5 = quchong3(['green', 'red', 'blue', 'red', 'pink'])
console.log(demo5);
</script>
其中使用filter去重://item表示arr数组中的所有元素 例 1,1,2,3,4,5,5,6 index为每个arr元素的索引 arr.indexOf(item) 打印出来的是arr数组中每个元素的索引如果arr数组中要有重复的元素,则会重复打印重复元素的第一个元素的索引 arr.indexOf(item,0)
* 去除重复元素依靠的是indexOf总是返回第一个元素的位置, 后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。*/
indexOf:可以判断一个元素是否在数组中存在,或者判断一个字符是否在字符串中存在,如果存在返回该元素或字符第一次出现的位置的索引,不存在返回-1。
对象数组去重的方法
// 对象数组去重
const arrObj = [{
id: 1,
name: '狗华'
}, {
id: 2,
name: '舒老八'
}, {
id: 1,
name: '麻涛'
}]
const quchong4 = (arr) => {
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i].id === arr[j].id) {
arr.splice(j, 1);
j--;
len--;
}
}
}
return arr;
}
console.log(quchong4(arrObj));