Map在我的数组中创建未定义的项目。

时间:2017-05-18 05:29:04

标签: ecmascript-6

我试图创建一个出生于1500年的所有发明家阵列。

const inventors = [
  { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
  { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
  { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
  { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
  { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
  { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
  { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
  { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
  { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
  { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
  { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
  { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
];

const inventors2 = inventors.map(
  function(item){
    const yearBorn = item.year;
    if (yearBorn >= 1500 && yearBorn <= 1600) {
    return item;
  }
});

console.log(inventors2);

我的代码有点工作,但它返回新数组中的未定义项。

index-START.html:43 
(12) [undefined, undefined, Object, undefined, Object, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
0
:
undefined
1
:
undefined
2
:
Object
3
:
undefined
4
:
Object
5
:
undefined
6
:
undefined
7
:
undefined
8
:
undefined
9
:
undefined
10
:
undefined
11
:
undefined
length
:
12
__proto__
:
Array(0)

2 个答案:

答案 0 :(得分:1)

正确的方法是使用过滤器:

const fifteen = inventors.filter( (item) => {
  const yearBorn = item.year;
  return (yearBorn >= 1500 && yearBorn <= 1600);
});

console.table(fifteen);

答案 1 :(得分:1)

使用过滤器帮助器。 map助手为其处理的每个元素输出一个值。如果没有匹配,则转到undefined。因此map助手不适合此用例。而是在这里使用filter助手。

const inventors2 = inventors.filter(inventor => 
  inventor.year >= 1500 && inventor.year <= 1600
);
console.log(inventors2);