使用Array.filter进行数组过滤



这里有两个代码示例:

编号1:

const cars = ['toyota', 'nissan', 'chevy', 'ford'];
const yearOfProducing = [2008, 1998, 2018, 2013];
const dates = cars.map((model, index)=> ({
model,
yearOfProducing: yearOfProducing[index]
}));
const filteredCars = dates.filter(el => {
const yearOfProducing = el.yearOfProducing;
return yearOfProducing.includes(1998) && yearOfProducing.includes(2018);
});
const filteredCars1 = filteredCars.map(el => el.model);
console.log(filteredCars1);

编号2:


const kinds = ['mangosteen', 'durian', 'lychee', 'carambola'];
const years = [[2017, 2018], [2017, 2018, 2019, 2020], [2020], [2019, 2020]];
const fruits = kinds.map((kind, index) => ({
kind,
years: years[index]
}));
const filteredFruites = fruits.filter(el => {
const years = el.years;
return years.includes(2017) && years.includes(2018);
});
const filteredKinds1 = filteredFruites.map(el => el.kind);
console.log(filteredKinds1);

第一个由于某种原因根本不起作用,而第二个做得很好。这对我来说有点奇怪,因为它们的结构完全相同,你知道为什么会发生这种情况吗?

首先是

const yearOfProducing = [2008, 1998, 2018, 2013]; 

const years = [[2017, 2018], [2017, 2018, 2019, 2020], [2020], [2019, 2020]];

有不同的结构,第二个有嵌套数组。。。

如果你像这样修复它:

const yearOfProducing = [[2008], [1998, 2018], [2018], [2013]];

另外请注意,我添加了[1998, 2018],因为您的代码是:

return yearOfProducing.includes(1998) && yearOfProducing.includes(2018);

它将起作用:

const cars = ['toyota', 'nissan', 'chevy', 'ford'];
const yearOfProducing = [[2008], [1998, 2018], [2018], [2013]];
const dates = cars.map((model, index)=> ({
model,
yearOfProducing: yearOfProducing[index]
}));
const filteredCars = dates.filter(el => {
const yearOfProducing = el.yearOfProducing;
return yearOfProducing.includes(1998) && yearOfProducing.includes(2018);
});
const filteredCars1 = filteredCars.map(el => el.model);
console.log(filteredCars1);

如果您正在查找与[[2008], [1998], [2018], [2013]];:的OR非AND

const yearOfProducing = el.yearOfProducing;
return yearOfProducing.includes(1998) || yearOfProducing.includes(2018);

const cars = ['toyota', 'nissan', 'chevy', 'ford'];
const yearOfProducing = [[2008], [1998], [2018], [2013]];
const dates = cars.map((model, index)=> ({
model,
yearOfProducing: yearOfProducing[index]
}));
const filteredCars = dates.filter(el => {
const yearOfProducing = el.yearOfProducing;
return yearOfProducing.includes(1998) || yearOfProducing.includes(2018);
});
const filteredCars1 = filteredCars.map(el => el.model);
console.log(filteredCars1);

否则,它将产生0个匹配项,不清楚您期望的结果。

在第一个例子中,yearOfProduction数组包含一些整数,而在第二个例子中Year实际上是数组的数组。在第一个例子中,yearOfProducting持有一个数字,在这一行中:

return yearOfProducing.includes(1998) && yearOfProducing.includes(2018);

生产年份不能同时是1998年和2018年。

最新更新