2017-05-18 3 views
0

作品の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) 
+0

これは、条件がマッチした場合にのみ「item」を返すためです。そうでない場合、 'map'はあなたのコードで何も返しません。そして結果配列の対応する要素は' undefined'になります。 – wostex

答えて

1

正しい方法は、フィルタを使用することです:

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

console.table(fifteen); 
1

は、このためのフィルタヘルパーを使用してください。 mapヘルパーは、処理する各要素に対して1つの値を出力します。一致しない場合はundefinedになります。したがって、mapヘルパーは、この用途には適していません。代わりにfilterヘルパーを使用してください。

const inventors2 = inventors.filter(inventor => 
    inventor.year >= 1500 && inventor.year <= 1600 
); 
console.log(inventors2); 
関連する問題