相信很多人都遇到过,想把数组里面重复的对象去掉,我最近遇到了,我是怎么处理的呢?试了三种方法,都可以实现。
以下是我测试用的数据:
let list = [
{
"key":"476",
"label":"琼海加积鸭店",
"disabled":true
},
{
"key":"477",
"label":"东方烤乳猪",
"disabled":true
},
{
"key":"481",
"label":"肯不了鸡",
"disabled":true
},
{
"key":"483",
"label":"火车站-肯德基",
"disabled":true
},
{
"key":"498",
"label":"汇茶",
"disabled":true
},
{
"key":"473",
"label":"叫个炸鸡旗舰店",
"disabled":true
},
{
"key":"475",
"label":"石山东山羊",
"disabled":true
},
{
"key":"484",
"label":"海南大厦-KFC",
"disabled":true
},
{
"key":"474",
"label":"海南鸡饭店",
"disabled":true
},
{
"key":"501",
"label":"炸鸡店(不设置)",
"disabled":true
},
{
"key":"474",
"label":"海南鸡饭店",
"disabled":true
},
{
"key":"501",
"label":"炸鸡店(不设置)",
"disabled":true
}
]
1.es6
function arrRemoval(list) {
if (!Array.isArray(list)) {// 判断是否为数组,不是就不往下执行
console.log('type error!')
return
}
let hash = {}
list = list.reduceRight((item, next) => {
hash[next.key] ? '' : hash[next.key] = true && item.push(next);
return item
}, []);
console.log(list)
}
arrRemoval(list)
2. 双重循环去重
function arrRemoval(list) {
if (!Array.isArray(list)) { // 判断是否为数组,不是就不往下执行
console.log('type error!')
return
}
let listArr = []
for(let i = 0; i < list.length; i++) {
let listItem = list[i]
let flag = true
for(let j = 0; j < listArr.length; j++) {
if(listArr[j].key === listItem.key) {
flag = false
}
}
if(flag) {
listArr.push(listItem)
}
}
return listArr
}
arrRemoval(list)
3.相连比较(先排序)
function arrRemoval(list) {
if (!Array.isArray(list)) {// 判断是否为数组,不是就不往下执行
console.log('type error!')
return
}
list.sort((a, b) => { return parseInt(a.key) - parseInt(b.key)}) // 排序
let listArr = [list[0]]
for(let i = 1; i < list.length; i++) {
if(list[i].key !== list[i-1].key) {// 后一项和前一项比较
listArr.push(list[i])
}
}
return listArr
}
arrRemoval(list)