我们先来说说简单的数组去重问题。
遍历去重法:
function unique(arr) {
const res = []
arr.forEach(item => {
if(res.indexOf(item) < 0) {
res.push(item)
}
})
return res
}
使用 ES6 的 Set:
function unique(arr) {
const set = new Set(arr)
return [...set] // return Array.from(set)
}
如果是数组对象时,我们无法使用 Set 进行去重。
let data = [
{"TYPE": "01", "REMARK": "休假"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "03", "REMARK": "在班"},
{"TYPE": "02", "REMARK": "上海出差"},
{"TYPE": "02", "REMARK": "北京出差"},
{"TYPE": "04", "REMARK": "休息"},
{"TYPE": "04", "REMARK": "休息"}
]
根据上述数据,将数组对象中 TYPE 相同的元素去除掉。
利用对象访问属性的方法,判断对象中是否存在 TYPE,代码如下:
function unique(arr) {
var result = [];
var obj = {};
for(var i =0; i<arr.length; i++){
if(!obj[arr[i].TYPE]){
result.push(arr[i]);
obj[arr[i].TYPE] = true;
}
}
return result
}
利用 reduce 方法遍历数组:
function unique(arr) {
var obj = {};
arr = arr.reduce(function(item, next) {
obj[next.TYPE] ? '' : obj[next.TYPE] = true && item.push(next);
return item;
}, []);
return arr
}