[英]Array filtering with 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);
如果您正在寻找 OR not AND with [[2008], [1998], [2018], [2013]];
:
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 个匹配项,不清楚您期望什么结果。
在第一个示例yearOfProducing数组中保存一些整数,而在第二个示例中, years数组实际上是数组数组。 在第一个示例中, yearOfProducing 持有一个数字,在这一行中:
return yearOfProducing.includes(1998) && yearOfProducing.includes(2018);
yearOfProducing 不能同时是 1998 和 2018。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.