1.利用hasOwnProperty
function unique(arr) {
var obj = {};
return arr.filter(function(item, index, arr){
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
var arr = [{name:'whl',age:'18'},{name:'whl'}]
console.log(unique(arr))
//[{name: "whl", age: "18"}]
2.利用reduce
ie9 以下得浏览器不兼容
routeTable = [{name:'whl',station_num_id:'0000'},{name:'wh1l',station_num_id:'0000'},1,1,true,NaN,NaN,true]
let obj = {}
routeTable = routeTable.reduce((cur, next) => {
obj[next.station_num_id] ? "" : obj[next.station_num_id] = true && cur.push(next);
return cur;
}, [])
console.log(routeTable)
//[{name:'whl',station_num_id:'0000'},1]
3.[…new Set(arr)]
不能筛选数组对象
routeTable = [{name:'whl',station_num_id:'0000'},{name:'wh1l',station_num_id:'0000'},1,1,true,NaN,NaN,true]
console.log([...new Set(routeTable)] )
//[{name: "whl", station_num_id: "0000"},{name: "wh1l", station_num_id: "0000"},1,true,NaN]
4.利用Map数据结构去重
不能筛选数组对象
function arrayNonRepeatfy(arr) {
let map = new Map();
let array = new Array(); // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if(map .has(arr[i])) { // 如果有该key值
map .set(arr[i], true);
} else {
map .set(arr[i], false); // 如果没有该key值
array .push(arr[i]);
}
}
return array ;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{name:'whl',age:18},{name:'whl',age:18}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]