function unique(arr) {
let hash = {};
return arr.reduce((item, next) => {
hash[next.id] ? '' : hash[next.id] = true && item.push(next);
return item;
}, []);
}
let lits = [ {
id: "4",
value: "待激活"
},
{
id: "5",
value: "已激活"
},
{
id: "6",
value: "已结束"
},
{
id: "4",
value: "待激活"
},
{
id: "7",
value: "待激活"
},
{
id: "4",
value: "待激活"
},
]
unique(lits)
console.log(unique(lits))
1.利用新旧数组遍历对比法
arr=[1,5,1,3,5,4,3,9,8]
let newArr = [];
/*
indexOf用于查找数组元素第一次出现的位置,没找到则返回值为-1,参数有两个,第一个为元素项目,参数二(可选)需要查找的位置,负数从-1往前面加
*/
for (let i=0;i<arr.length;i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
console.log(newArr);//[1, 5, 3, 4, 9, 8]
2.利用新语法 new Set()
arr=[1,5,1,3,5,4,3,9,8]
let mySet = new Set(arr); // 非重复的类数组
console.log(mySet,'mySet');//{{1, 5, 3, 4, 9,8}
// let newArr = Array.from(mySet); // set转数组
let newArr = [...mySet]; // 或者是这种解构方法
console.log(newArr);//[1, 5, 3, 4, 9, 8]
3.filter与indexOf结合
/* 这个过滤就很巧妙,利用索引与每一项出现的首次位置(indexOf作用)进行对比,
当符合条件的时候返回出去
*/
arr=[1,5,1,3,5,4,3,9,8]
var newArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
})
console.log(newArr);//[1, 5, 3, 4, 9, 8]
4.includes()的妙用
arr=[1,5,1,3,5,4,3,9,8]
let newArr = [];
for (let i=0;i<arr.length;i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
console.log(newArr);//[1, 5, 3, 4, 9, 8]
5.利用对象属性来进行判断
arr=[1,5,1,3,5,4,3,9,8]
let obj = {}; // 对象的key值是唯一的
let newArr = [];
for (let i=0;i<arr.length;i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = arr[i];
}
}
console.log(obj)//{1: 1, 3: 3, 4: 4, 5: 5, 8: 8, 9: 9}