繁体   English   中英

使用 Array.filter 进行数组过滤

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM