这里有两个代码示例:
编号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年。