Typescript 基于内部数组的值筛选对象数组

Typescript 基于内部数组的值筛选对象数组,typescript,Typescript,我想从数组课程中仅选择在字段id数组中至少有一个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

我想从数组
课程
中仅选择在
字段id
数组中至少有一个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))
}

例如,如果FieldID包含两个ID,则函数将返回属于所有字段的课程。(我想提取至少有一个选定字段的课程)

以下是有效的解决方案:

const课程=[
{id:5,名称:“某些名称1”,字段:[{id:28,名称:“字段名称”},{id:29,名称:“字段名称2”}]},
{id:18,名称:“某些名称2”,字段:[{id:11,名称:“字段名称”},{id:28,名称:“字段名称2”}],
{id:7,名称:“一些名称3”,字段:[{id:29,名称:“字段名称”},{id:9,名称:“字段名称2”}]
];
常量字段ID=[29,9];
const filtered_courses=courses.filter(course=>course.fields.some(field=>fieldid.includes(field.id));

console.log(已过滤的课程)以下是工作解决方案:

const课程=[
{id:5,名称:“某些名称1”,字段:[{id:28,名称:“字段名称”},{id:29,名称:“字段名称2”}]},
{id:18,名称:“某些名称2”,字段:[{id:11,名称:“字段名称”},{id:28,名称:“字段名称2”}],
{id:7,名称:“一些名称3”,字段:[{id:29,名称:“字段名称”},{id:9,名称:“字段名称2”}]
];
常量字段ID=[29,9];
const filtered_courses=courses.filter(course=>course.fields.some(field=>fieldid.includes(field.id));

console.log(已过滤的课程)试着解释一下你的脚本是做什么的,你可能会知道为什么它不能按预期工作。为什么
fieldIds.map(…)
为什么
course.fields.map(…)
?这是否回答了您的问题?不,它没有,请参阅我的编辑来解释您的脚本的功能,您可能会知道它为什么不能按预期工作。为什么
fieldIds.map(…)
为什么
course.fields.map(…)
?这是否回答了您的问题?不,没有,请参见我的编辑