javascript - 如何删除数组中具有相同键值对的对象

标签 javascript arrays object filter

我浏览了许多堆栈溢出问题,但似乎没有一个能完全回答我的问题。我有一个对象数组,我想通过删除键和值相同的所有对象来减少该数组。

所以我的对象数组是:

[{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}]

最终结果应该是:

[{a:1},{a:2},{c:3},{b:1},{c:4}]

我尝试过使用filer和map,但我只能获取数组中的第一个对象,而不是数组中具有不同键/值对的所有对象。我也尝试过使用filter和findIndex,但遇到了同样的问题。

我也无法在将对象插入数组之前对其进行过滤。

有人能指出我正确的方向吗?

最佳答案

您可以使用 JSON.stringify() 来比较这两个项目。然后我们使用 reduce 添加到一个新数组,如果它在数组中,我们不会添加它,否则我们会添加它。

const array = [{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}]

let unique = array.reduce((res, itm) => {
  // Test if the item is already in the new array
  let result = res.find(item => JSON.stringify(item) == JSON.stringify(itm))
  // If not lets add it
  if(!result) return res.concat(itm)
  // If it is just return what we already have
  return res
}, [])

console.log(unique)

或者您可以使用 Set (正如 Fissure King 所说)制作一个独特的项目列表,如下所示:

const array = [{a:1},{a:2},{c:3},{b:1},{a:1},{c:3},{c:4},{a:1}]

let unique = [...new Set(array.map(itm => JSON.stringify(itm)))].map(i => JSON.parse(i))

console.log(unique)

关于javascript - 如何删除数组中具有相同键值对的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51088882/

相关文章:

javascript - HTML5 语音合成 API - 只能使用 "native"语音

javascript - 为什么我的 bool 值在将其作为值传递给 radio 组件时始终为 true?

python - 返回最长摆动子数组

javascript - 这个 JSON 字符串有什么问题?它还可以与 JSONLint 一起使用

javascript - jQuery 如何使弹出窗口在计时器上出现/消失?

Javascript/React - 获取数组中匹配特定条件的第一项

arrays - Flutter - 在同一指令中创建列表和 'addAll'

javascript - node.js 的奇怪对象成员行为

Java:存储分组对象(可按其类别访问)的正确方法是什么?

javascript - 如果有子元素,则删除元素中的特定范围 - jquery