我有一個精神障礙,不允許我前進。
我有一個陣列,我將用以下代碼舉例說明:
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",
},
];
使用這種方法,我實作的是生成一個沒有任何雪佛蘭汽車的陣列,但我需要過濾掉那些同時為紅色和雪佛蘭品牌的汽車。
我怎么能做到這一點?我想了很多,我想我已經筋疲力盡了。
uj5u.com熱心網友回復:
由于需要過濾掉既是品牌Chevrolet又是紅色的汽車,因此需要實作以下邏輯運算式:
let newArrayOfCars = carsWithFiveDoors.filter(({ brand, color }) => !(brand === "Chevrolet" && color === "Red"));
uj5u.com熱心網友回復:
filter將始終回傳一個新陣列 - 您不能就地過濾陣列。因此,您將需要在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);
uj5u.com熱心網友回復:
在這種情況下,您應該在這里使用雙過濾器。使用下面的代碼,這應該可以解決您的問題。
let newArrayOfCars = cars.filter(({ doors }) => doors == "5").filter(({ brand, color }) => brand !== "Chevrolet" && color !== "Red");
另請注意,您可以嘗試使用 && 將所有三個條件同時放入單個過濾器中。
uj5u.com熱心網友回復:
首先,您需要使用===而不是==- 這就是為什么您會在搜索結果中看到 3 門汽車和 5 門汽車。
let carsWithFiveDoors = cars.filter(({ doors }) => doors === "5");
另外,我認為您可以通過替換&&為||which 將過濾掉任何紅色或雪佛蘭汽車(我認為您說的是您想要的)來簡化這一點。隨時糾正我,我會更新答案。
我認為你想要的是:
let carsWithFiveDoors = cars.filter({ doors, brand, color } => (doors === "5" && (brand !== "Chevrolet" || color !== 'Red'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397324.html
標籤:javascript 数组 筛选
