在 JavaScript 中将 && 运算符与 filter() 方法一起使用

Use && operator with filter() method in JavaScript

我有一个心理障碍,不允许我前进。

我有一个数组,我将使用以下代码举例说明:

let cars = [
  { brand: "Ford", year: "2012", color: "White", doors: "5", model: "One" },
  { brand: "Chevrolet", year: "2021", color: "Red", doors: "5", model: "Two" },
  { brand: "Chevrolet", year: "2000", color: "Black", doors: "5", model: "Three" },
  { brand: "Citroen", year: "2004", color: "Pink", doors: "3", model: "Four" },
];

我需要将所有满足有 5 扇门条件的汽车存储在一个变量中。嗯,

let carsWithFiveDoors = cars.filter(({ doors }) => doors == "5");

但是我也需要它同时满足两个条件。更清楚地说,对于只有那些 5 门汽车的新阵列,我需要应用另一个过滤器,让我只有那些不是雪佛兰品牌的汽车,也不是红色的。当按照简单的逻辑,我将此方法应用于我的数组时,问题就出现了:

carsWithFiveDoors.filter(({ brand, color }) => brand !== "Chevrolet" && color !== "Red");

此过滤器的结果是以下数组:

let newArrayOfCars = [
  {
    brand: "Ford",
    year: "2012",
    color: "White",
    doors: "5",
    model: "One",
  },
  {
    brand: "Toyota",
    year: "2000",
    color: "Black",
    doors: "5",
    model: "Three",
  },
  {
    brand: "Citroen",
    year: "2004",
    color: "Pink",
    doors: "3",
    model: "Four",
  },
];

通过这种方法,我实现了生成 一个没有任何雪佛兰汽车的数组,但我需要过滤掉那些同时是红色和雪佛兰品牌的汽车.

我怎样才能做到这一点?我想了很多,我想我已经筋疲力尽了。

在这种情况下,您应该在这里使用双重过滤器。使用下面的代码,这应该可以解决您的问题。

let newArrayOfCars = cars.filter(({ doors }) => doors == "5").filter(({ brand, color }) => brand !== "Chevrolet" && color !== "Red");

另请注意,您可以尝试使用 && 将所有三个条件同时放在一个过滤器中。

由于需要过滤掉既是品牌Chevrolet又是红色的汽车,所以需要实现如下逻辑表达式:

let newArrayOfCars = carsWithFiveDoors.filter(({ brand, color }) => !(brand === "Chevrolet" && color === "Red"));

首先,您需要使用 === 而不是 == - 这就是为什么您在搜索结果中看到 3 门车和 5 门车的原因。

let carsWithFiveDoors = cars.filter(({ doors }) => doors === "5");

此外,我认为您可以通过将 && 替换为 || 来简化此操作,这将过滤掉任何红色或雪佛兰汽车(我认为您想要的是) .随时纠正我,我会更新答案。

我想你想要的是这个:

let carsWithFiveDoors = cars.filter({ doors, brand, color } => (doors === "5" && (brand !== "Chevrolet" || color !== 'Red'))

filter 将始终 return 一个新数组 - 您不能就地过滤数组。因此,您将需要在 carsWithFiveDoors 数组上使用一个新过滤器来生成 noRedFiveDoorChevs.

的新数组

注意:实际输出不会导致您的预期输出。

const cars = [
  { brand: "Ford", year: "2012", color: "White", doors: "5", model: "One" },
  { brand: "Chevrolet", year: "2021", color: "Red", doors: "5", model: "Two" },
  { brand: "Chevrolet", year: "2000", color: "Black", doors: "5", model: "Three" },
  { brand: "Citroen", year: "2004", color: "Pink", doors: "3", model: "Four" },
];

const carsWithFiveDoors = cars.filter(({ doors }) => doors === "5");

const noRedFiveDoorChevs = carsWithFiveDoors.filter(({ brand, color }) => {
  return brand !== "Chevrolet" && color !== "Red"
});

console.log(noRedFiveDoorChevs);