过滤器不返回过滤后的数组

时间:2021-02-04 17:33:03

标签: javascript ecmascript-6

我有一个这样的数组:

  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 做到这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以直接在 swCharacters 上调用过滤器。

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(x => x.seriesId)

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

这将导致

[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);

答案 1 :(得分:2)

你不应该使用map函数,只是过滤,像这样:

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