二维数组去重的方法集合

235 阅读2分钟

最近在做项目时遇到二维对象数组去重,特在这里记录一下,以防止自己忘记。目前有两种方法:

第一种方法,通过创建一个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, '男']

方法二是利用reduce 高阶函数,这个以后有时间再补充