最近在做项目时遇到二维对象数组去重,特在这里记录一下,以防止自己忘记。目前有两种方法:
第一种方法,通过创建一个object对象,利用对象key值相同时取后面key的value,这是一种非常巧妙的思路。
数据结构和代码如下:
let { keys, values, entries } = Object
let objArr = [
{
key: 'BILL_DATE',
value: '2024-01-12'
},
{
key: 'BILL_NO',
value: '1905689702581141505'
},
{
key: 'FIELD13',
value: 'BX202400043'
}
]
let arr = [
[
{
key: 'BILL_DATE',
value: '2024-01-12'
},
{
key: 'BILL_NO',
value: '1905685845700509699'
},
{
key: 'FIELD13',
value: 'BX202400041'
}
],
[
{
key: 'BILL_DATE',
value: '2024-01-12'
},
{
key: 'BILL_NO',
value: '1905689702581141505'
},
{
key: 'FIELD13',
value: 'BX202400043'
}
],
[
{
key: 'BILL_DATE',
value: '2024-01-12'
},
{
key: 'BILL_NO',
value: '1905685845700509699'
},
{
key: 'FIELD13',
value: 'BX202400041'
}
],
[
{
key: 'BILL_DATE',
value: '2024-01-12'
},
{
key: 'BILL_NO',
value: '1905689702581141505'
},
{
key: 'FIELD13',
value: 'BX202400043'
}
]
]
// 二维对象数组去重
function deduplicate(arr) {
const hash = {}
for (let i = 0; i < arr.length; i++) {
const key = JSON.stringify(arr[i]) //关键在于这两句,如果一个对象的key相同,则取后一个key值的value,而且这里key即value的string格式,如果相同,则取后面一个。这就相当于去重了,哈哈,思路太清奇了
hash[key] = arr[i]
console.log('key1111: ', key)
console.log('key222: ', hash[key])
}
console.log('key3333: ', Object.values(hash))
return Object.values(hash)
}
console.log('去重后:', deduplicate(arr))
// 打印结果:[
[
{
"key": "BILL_DATE",
"value": "2024-01-12"
},
{
"key": "BILL_NO",
"value": "1905685845700509699"
},
{
"key": "FIELD13",
"value": "BX202400041"
}
],
[
{
"key": "BILL_DATE",
"value": "2024-01-12"
},
{
"key": "BILL_NO",
"value": "1905689702581141505"
},
{
"key": "FIELD13",
"value": "BX202400043"
}
]
]
//再举一个单个object的例子:
let obj = {
name: 20,
name: 20,
gender: '男'
}
let arr1 = Object.values(obj)
console.log(arr1) // [20, '男']