javascript - 如何使用数组中的值过滤javascript中的嵌套数组以使其也适用于单个值?
问题描述
我想出了另一个主题的示例,它可以从另一个存储过滤器值的数组中过滤嵌套数组。
有趣的是,当数组中有单个元素时,它不能很好地工作。
const data = [
{
"guid": "j5Dc9Z",
"courses": [
{
"id": 3,
"name": "foo"
}
]
},
{
"guid": "a5gdfS",
"courses": [
{
"id": 1,
"name": "bar"
},
{
"id": 3,
"name": "foo"
}
]
},
{
"guid": "jHab6i",
"courses": [
{
"id": 7,
"name": "foobar"
}
]
}
];
const courses = [3];
const r = data.filter(d => d.courses.every(c => courses.includes(c.id)));
console.log(r);
在我的示例中,我们应该看到两个 3,但它给了我们第一个。如何过滤这个嵌套数组与多个值或单个?
解决方案
您在这里要求所有/每个对象都具有 id == 3,但您想要的是让任何/某些对象具有 id == 3,如下所示:
const data = [{
"guid": "j5Dc9Z",
"courses": [{
"id": 3,
"name": "foo"
}]
},
{
"guid": "a5gdfS",
"courses": [{
"id": 1,
"name": "bar"
}, {
"id": 3,
"name": "foo"
}]
}, {
"guid": "jHab6i",
"courses": [{
"id": 7,
"name": "foobar"
}]
}
];
const courses = [3];
const r = data
.filter(d => d.courses.some(c => courses.includes(c.id)))
.map(d => ({ ...d, courses: d.courses.filter(c => courses.includes(c.id))
}));
console.log(r);
推荐阅读
- javascript - 如何在 Javascript 中显示随机背景图像?
- javascript - 作为实际单词的逻辑运算符
- javascript - 添加 onclick 函数以转到 url
- javascript - 在 For 循环中迭代随机数
- python - Getting the json data from the website using beautifulsoup
- html - 如何在不手动声明其大小的情况下使网格项填充整个容器?自动属性似乎不起作用
- asp.net-mvc - 使用 Url.Action 或发布表单注销
- javascript - 这种 JavaScript 类字段定义的形式是什么?
- c - 为结构化指针分配内存
- python - 是否可以使用单词而不是数字作为 Python 中的输入编写 if 语句