在做项目的时候,经常会遇见对一个数组进行去重,特别是数组中包含的是对象的形式,因此就来记录一下处理方法。供我今后方便查看以及供大家采纳~
方法一:双重循环
采用两两数组进行比较的方式,如果后一个对象的莫属性和前一个对象的莫属性值相等,就把后面的对象删除,并且注意循环需减一。
export default {
data(){
return {
list:[
{id:"001",name:'一'},
{id:"002",name:'二'},
{id:"003",name:'三'},
{id:"004",name:'四'},
{id:"005",name:'五'},
{id:"006",name:'六'},
{id:"003",name:'三'},
{id:"008",name:'八'},
{id:"009",name:'九'},
{id:"001",name:'一'},
],
}
},
mounted(){
this.handleList();
},
methods:{
handleList(){
for(let i = 0; i < this.list.length; i++){
for(let j = i + 1; j < this.list.length; j++){
if(this.list[i].id == this.list[j].id){
this.list.splice(j, 1);
j--;//注意
}
}
}
console.log(JSON.parse(JSON.stringify(this.list)),"去重后的数组");
}
}
方法二
定义一个数组存储id的值,然后逐个比较,把id值重复的对象删除即可
export default {
data(){
return {
list:[
{id:"001",name:'一'},
{id:"002",name:'二'},
{id:"003",name:'三'},
{id:"004",name:'四'},
{id:"005",name:'五'},
{id:"006",name:'六'},
{id:"003",name:'三'},
{id:"008",name:'八'},
{id:"009",name:'九'},
{id:"001",name:'一'},
],
}
},
mounted(){
this.handleList();
},
methods:{
handleList(){
let idList = [],resultList=[];
for (let i = 0; i < this.list.length; i++) {
if (idList.indexOf(this.list[i].id) == -1) {
idList.push(this.list[i].id);
resultList.push(this.list[i]);
} else {
this.list.splice(i, 1);
i-- // 这个别忘咯
}
}
console.log(JSON.parse(JSON.stringify(resultList)),"去重后的数组");
}
}
方法三:使用reduce方法
该方法一般用来计算汇总,它接受一个函数作为参数,该函数会被应用到数组的每个元素上。该函数的返回值会存储在一个累加器中,并作为下一次迭代的输入。最终,reduce()方法会返回累加器的最终值。 reduce()方法的语法如下: array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- total是累加器的值,它的初始值可以通过initialValue参数指定,也可以默认为数组的第一个元素。
- currentValue是数组当前正在处理的元素。
- currentIndex是当前元素的索引。
- arr是原始数组。
- initialValue是可选的,用于指定累加器的初始值。
总结来说,reduce()方法是一个强大的数组方法,用于对数组进行计算和汇总。它可以通过提供一个函数来自定义计算过程,并返回一个单个值作为结果。
export default {
data(){
return {
list:[
{id:"001",name:'一'},
{id:"002",name:'二'},
{id:"003",name:'三'},
{id:"004",name:'四'},
{id:"005",name:'五'},
{id:"006",name:'六'},
{id:"003",name:'三'},
{id:"008",name:'八'},
{id:"009",name:'九'},
{id:"001",name:'一'},
],
}
},
mounted(){
this.handleList();
},
methods:{
handleList(){
let obj = {};
let resultList = this.list.reduce((totalList,next)=>{
/*判断obj对象中是否已经有该属性 没有的话 push 到 currList空数组中*/
obj[next.id] ? "" : obj[next.id] = totalList.push(next);
return totalList;
},[]);
console.log( obj,"obj对象",JSON.parse(JSON.stringify(resultList)),"去重后的数组");
}
}
方法四:使用Map()集合
Map集合常用方法:
- has方法可以判断Map对象中是否存在指定元素,有则返回true,否则返回false
- set方法可以向Map对象添加新元素 map.set(key, value),key为任何类型的数据
- values方法可以返回Map对象值的遍历器对象
export default {
data(){
return {
list:[
{id:"001",name:'一'},
{id:"002",name:'二'},
{id:"003",name:'三'},
{id:"004",name:'四'},
{id:"005",name:'五'},
{id:"006",name:'六'},
{id:"003",name:'三'},
{id:"008",name:'八'},
{id:"009",name:'九'},
{id:"001",name:'一'},
],
}
},
mounted(){
this.handleList();
},
methods:{
handleList(){
// 方法一:
let map = new Map();
for (let item of this.list) {
if (!map.has(this.list.id)) {
map.set(item.id, item);
}
}
let resultList = [...map.values()];
console.log(JSON.parse(JSON.stringify(resultList)),"去重后的数组");
// 方法二:
const map = new Map();
const resultList = this.list.filter(v => !map.has(v.id) && map.set(v.id, 1));
console.log(JSON.parse(JSON.stringify(resultList)),"去重后的数组");
}
}
总结
以上就是我要分享的所有js涉及到对象数组去重的方法,以我的能力目前只能想到这些,若有其它更多便捷的方法或写的不足请多多指教!