typescript - 根据内部数组的值过滤对象数组
问题描述
我只想从数组中选择courses
至少有一个fieldIds
数组中具有 id 的字段的课程。下面是 thw 数组的格式:
courses = [
{id: 5, name:"some name1", fields:[{id: 28, name:"field name"}, {id: 29, name:"field name2"}]},
{id: 18, name:"some name2", fields:[{id: 11, name:"field name"}, {id: 28, name:"field name2"}]},
{id: 7, name:"some name3", fields:[{id: 29, name:"field name"}, {id: 9, name:"field name2"}]}
]
fieldIds = [29, 9]
所以结果应该是:
courses = [
{id: 5, name:"some name1", fields:[{id: 28, name:"field name"}, {id: 29, name:"field name2"}]},
{id: 7, name:"some name3", fields:[{id: 29, name:"field name"}, {id: 9, name:"field name2"}]}
]
这是我尝试过的,我总是得到相同的数组,它没有任何改变
fieldIds.map(fieldId => {
courses = courses.filter(course => course.fields.map(f => f.id == fieldId);
});
在尝试了这个问题的回答后编辑如下:
fieldIds.map(fieldId => {
courses = courses.filter(course => course.fields.some(f => f.id == fielded))
}
如果 fieldIds 包含几个 ID,例如该函数返回课程属于所有字段。(我想提取至少有一个选定字段的课程)
解决方案
这是工作解决方案:
const courses = [
{id: 5, name:"some name1", fields:[{id: 28, name:"field name"}, {id: 29, name:"field name2"}]},
{id: 18, name:"some name2", fields:[{id: 11, name:"field name"}, {id: 28, name:"field name2"}]},
{id: 7, name:"some name3", fields:[{id: 29, name:"field name"}, {id: 9, name:"field name2"}]}
];
const fieldIds = [29, 9];
const filtered_courses = courses.filter(course => course.fields.some(field => fieldIds.includes(field.id)));
console.log(filtered_courses);
使用条件 ( some )过滤课程数组,验证字段数组中的至少一个元素与fieldIds数组的值相等。
PS:如果fields数组和fieldIds数组按 ASC 或 DESC 顺序排序,则“算法”要快得多,因为某些方法返回得更早。
推荐阅读
- python - PySide2 - 设置/删除小部件之间的间距
- google-apps-script - 导出 Google 工作表并上传到 Sharepoint
- firebase - Firebase downloadUrl 和访问令牌冲突
- swift - Swift - 带有 Firebase 的条带无法解析协议 STPCustomerEphemeralKeyProvider 之后的临时密钥响应
- python - 如何扩展线性回归线并预测未来?
- statistics - 使用 Splunk 计算平均偏差
- python - 在 SQLAlchemy 的原始 SQL 查询中实现占位符
- installshield - 如何修复 InstallShield 向导错误 -5011:0x8000ffff?
- stack - 如何检查 Maxima 中的输入字段是否为空?
- kubernetes - kubeadm init:clusterDND IP 的推荐值