javascript - 如何删除数组中具有相同键值对的对象
问题描述
我查看了许多堆栈溢出问题,但似乎没有一个能完全回答我的问题。我有一个对象数组,我想通过删除键和值相同的所有对象来减少它们。
所以我的对象数组将是:
[{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)
推荐阅读
- python - 如何使用 pyspark 遍历 JSON 中的嵌套元素
- gupshup - 使用 gupshup 的发送 API 在 24 小时内回复用户显示用户未选择加入错误
- python-3.x - FileNotFoundError:找不到模块“libhsm.dll”
- javascript - 在复选框中删除Vue JS中的元素
- r - 使用R从pdf中提取图像的方法
- r - 使用 plyr ldply 与函数内的函数并行
- flutter - flutter 如何从 API 获取标记并在地图上显示
- javascript - 道具更改时反应子组件不更新
- javascript - 如何将通过api收到的文件发送到谷歌驱动器nodejs
- mobile-application - 我应该选择哪种服务将网站转换为移动应用程序?