js中想实现找到数组对象中相同的属性拿出来组成一个数组非常简单,只需要用filter即可实现;但是想去重就需要多费点脑子了。
常规思路:for嵌套循环
function unique(arr,u_key){
let result = []
result[0] = arr[0]
arr.forEach((meta_item,i)=>{
//声明计数变量,如果源数组中的一个对象和result结果数组中的所有对象不同,就push
let num = 0
result.forEach((r_item,j)=>{
if (meta_item[u_key]!==r_item[u_key]) {
num++
}
if (num === result.length) {
result.push(meta_item)
}
})
})
return result
}
es6使用map思路
Map类型是键值对的有序列表,而键和值都可以是任意类型,所以我们可以通过map.get的方法确定是否有此属性与map.set设置数据的方法,结合filter去重
/**
* arr:要去重的数组
* attr: 去重根据的属性
*/
function unique(arr, attr) {
const res = new Map();
return arr.filter((item) => {
var attrItem = item[attr]
return !res.has(attrItem) && res.set(attrItem, 1)
})
}
console.log(unique(array2, "id")) // 去重后数组
使用lodash的uniqBy
let unarrlist = this.$lodash.uniqBy(Arrlist,'insurerCode');
console.log(unarrlist)
let unArr = this.$lodash.uniqBy(arrayList,'id');
console.log(unArr)