javascript - 过滤对象并获取所有具有相同值的项目 javascript
问题描述
我有一个像这样的对象
filters = [
{gpo1: [{name:"a", selected: false}]
},
{gpo2: [{name:"b", selected: true}]
},
{gpo3: [{name:"a", selected: false}
{name:"b", selected: false}
{name:"c", selected: true}
{name:"d", selected: false}
{name:"e", selected: true}]
},
{gpo4: [{name:"f", selected: false}
{name:"h", selected: false}
{name:"r", selected: true}
{name:"w", selected: false}
{name:"x", selected: true}]
},
]
我需要得到这个结果
selectedFilters = [
{gpo2: [{name:"b", selected: true}]
},
{gpo3: [{name:"c", selected: true}
{name:"e", selected: true}]
},
{gpo4: [{name:"r", selected: true}
{name:"x", selected: true}]
}
]
我已经用 lodash 寻找了一些替代品,但到目前为止我没有运气:(我希望有人能帮助我,谢谢
解决方案
您需要使用过滤的项目重建对象。
const
filters = [{ gpo1: [{ name: "a", selected: false }] }, { gpo2: [{ name: "b", selected: true }] }, { gpo3: [{ name: "a", selected: false }, { name: "b", selected: false }, { name: "c", selected: true }, { name: "d", selected: false }, { name: "e", selected: true }] }, { gpo4: [{ name: "f", selected: false }, { name: "h", selected: false }, { name: "r", selected: true }, { name: "w", selected: false }, { name: "x", selected: true }] }],
result = filters.flatMap(o => {
const entries = Object.entries(o).flatMap(([k, v]) => {
v = v.filter(({ selected }) => selected);
return v.length
? [[k, v]]
: []
});
return entries.length
? Object.fromEntries(entries)
: [];
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- php - 如果用户具有角色,则将复选框标记为选中
- c# - SQLITE - IDbConnection c# .net last_insert_rowid
- asp.net-core - 将 Azure Active Directory 与 aspnetcore 应用程序一起使用
- windows - 通过QProcess调用bash.exe:kill不杀子进程
- ruby-on-rails - Rails 无法删除或更新父行:外键约束在不使用依赖销毁的情况下失败
- lighthouse - 为什么同一测试运行的 Lighthouse 选项卡和性能选项卡之间的 LCP 值存在巨大差异?
- node.js - 类实例中的单例服务
- kotlin - 如何在 Kotlin/Native 中设置嵌入式结构字段
- azure - Azure 实时指标不显示传入请求、传出请求、服务器运行状况
- json - Flutter 如何从 JSON API 获取标记并在 Google Map 上显示