在 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);
我有一个心理障碍,不允许我前进。
我有一个数组,我将使用以下代码举例说明:
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);