ecmascript-6 - 从对象数组中删除重复的对象副本
问题描述
我有一组从 API 获得的对象。属性名称是动态的(这意味着我没有一个完整的列表)。如何获得所有不同对象的数组?合约规定,如果键相等,值也相等。我试图环顾四周,但没有发现与这个问题完全一样的问题。
[ 20:31:28
{
'product-management': 'Product management'
},
{
'product-development': 'Product development'
},
{
'client-work': 'Client work'
},
{
'client-work': 'Client work'
},
{
'product-development': 'Product development'
},
{
'client-work': 'Client work'
},
{
'product-development': 'Product development'
}
]
解决方案
将数组传播到Object.assign()
以将所有对象合并为一个对象。由于所有对象的属性都是唯一的,这将只从重复项中留下一个键(和值)。然后用 转换为 [key, value] 对Object.entries()
,并映射回单个对象:
const data = [{"product-management":"Product management"},{"product-development":"Product development"},{"client-work":"Client work"},{"client-work":"Client work"},{"product-development":"Product development"},{"client-work":"Client work"},{"product-development":"Product development"}]
const result = Object.entries(Object.assign({}, ...data))
.map(([k, v]) => ({ [k]: v }))
console.log(result)
根据@Bergi 的建议,您还可以在删除重复项的同时将其转换为更健全的 API:
const data = [{"product-management":"Product management"},{"product-development":"Product development"},{"client-work":"Client work"},{"client-work":"Client work"},{"product-development":"Product development"},{"client-work":"Client work"},{"product-development":"Product development"}]
const result = Object.entries(Object.assign({}, ...data))
.map(([key, value]) => ({ key, value }))
console.log(result)
推荐阅读
- sql - 如何在一个 SQL 查询中替换多个列?
- python - Pycharm,不能选择解释器
- javascript - 如何在 react-pdf-viewer 中创建自定义按钮?
- json - Discord Bot 未正确读取 .json 数据库
- algorithm - 从随机顶点到最长路径端点的最长距离
- javascript - 使用 O(1) 时间复杂度 JS 删除 Map() 中最旧的条目
- c - 静态链接时 SDL 找不到视频设备
- reactjs - docker-compose 堆栈(反应 + 烧瓶)
- python - 使用 __import__ 和 pkgutil 相对导入包并使用 python3 返回其项目的字典的最佳方法?
- ios - 如何在 XCode 中找到我的项目中所有未使用的方法和变量?