我想使用另一个对象数组来过滤一个对象数组,就像下面的代码片段中所示:
代码运行正常,但我不喜欢我再次迭代
有没有办法在一次迭代中过滤这个数组?
const entries = [
{
id: 1,
name: "Entry 1",
topics: [
{
id: 101,
name: "topic 1.1",
},
{
id: 102,
name: "topic 1.2",
},
{
id: 103,
name: "topic 1.3",
},
],
},
{
id: 2,
name: "Entry 2",
topics: [
{
id: 201,
name: "topic 2.1",
},
{
id: 202,
name: "topic 2.2",
},
{
id: 203,
name: "topic 2.3",
},
],
},
{
id: 3,
name: "Entry 3",
topics: [
{
id: 25,
name: "topic 3.1",
},
{
id: 26,
name: "topic 3.2",
},
],
},
];
const filters = [
{
id: 1,
topics: [
{
id: 101,
},
{
id: 102,
},
],
},
{
id: 2,
topics: [],
},
];
const result = entries
.filter(({ id, topics }) =>
filters.some(
({ id: idFromFilteres, topics: topicsFromFilters }) =>
idFromFilteres === id && topicsFromFilters.length > 0,
),
)
.map(({ id, topics, ...rest }) => ({
id,
topics: topics?.filter(({ id: topicId }) =>
filters.some(({ topics: topicsFromFilter }) =>
topicsFromFilter.some(
({ id: topicIdFromFilter }) => topicIdFromFilter === topicId,
),
),
),
...rest,
}));
console.log(result);
entries
数组来过滤topics
;还要注意,空topics
的条目也会被过滤掉。有没有办法在一次迭代中过滤这个数组?