filter没有返回被过滤的数组



我有一个这样的数组:

let swCharacters = [
{ id: 0, name: "Luke", seriesId: 1 },
{ id: 1, name: "Han", seriesId: 1 },
{ id: 2, name: "Din Djarin", seriesId: 4 },
{ id: 3, name: "Anakin", seriesId: 2 },
{ id: 4, name: "Yoda", seriesId: 1 },
{ id: 5, name: "Grogu", seriesId: 4 }
];

我想过滤掉除了那些有seriesId为4的所有内容,所以我发现这个很有帮助:

swCharacters = swCharacters.filter(x => x.seriesId === 4).map(x => x.seriesId)
console.log("The Mandalorian: ", swCharacters);

但是这并没有做我需要它做的事情。

它只是创建一个数组,4是唯一的成员,如[4,4]。

我需要过滤数组看起来像:

[{ id: 3, name: "Din Djarin", seriesId: 4 }, { id: 6, name: "Grogu", seriesId: 4 }]

我可以用javascript做这个吗?

谢谢!

你可以直接在swCharacters上调用filter。

const res = swCharacters.filter(x => x.seriesId === 4);

let swCharacters = [{
id: 0,
name: "Luke",
seriesId: 1
},
{
id: 1,
name: "Han",
seriesId: 1
},
{
id: 2,
name: "Din Djarin",
seriesId: 4
},
{
id: 3,
name: "Anakin",
seriesId: 2
},
{
id: 4,
name: "Yoda",
seriesId: 1
},
{
id: 5,
name: "Grogu",
seriesId: 4
}
];

const res = swCharacters.filter(x => x.seriesId === 4);
console.log(res)

当你将它与map链接时,它首先会应用

map(x => x.seriesId)

返回一个包含所有seriesId的数组作为过滤器的输入。过滤器将检查数组中所有值为4的seriesid,并将其作为数组返回。

这将导致

[4, 4]

let swCharacters = [{
id: 0,
name: "Luke",
seriesId: 1
},
{
id: 1,
name: "Han",
seriesId: 1
},
{
id: 2,
name: "Din Djarin",
seriesId: 4
},
{
id: 3,
name: "Anakin",
seriesId: 2
},
{
id: 4,
name: "Yoda",
seriesId: 1
},
{
id: 5,
name: "Grogu",
seriesId: 4
}
];
swCharacters = swCharacters.filter(x => x.seriesId === 4).map(x => x.seriesId)
console.log(swCharacters);

你不应该使用map函数,只使用filter,像这样:

swCharacters = swCharacters.filter(x => x.seriesId === 4)

console.log("The Mandalorian: ", swCharacters);

最新更新