Evanss
Evanss

Reputation: 23563

Map creates undefined items in my array.

Im trying to create an array of all inventors who were born in the 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);

My code sort of works but it returns undefined items in the new array.

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)

Upvotes: 0

Views: 42

Answers (2)

Ravindra Ranwala
Ravindra Ranwala

Reputation: 21124

Use the filter helper for this. map helper outputs one value for each element it processes. If nothing matches, leads to undefined. Hence map helper is not suitable for this usecase. Instead use filter helper here.

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

Upvotes: 1

Evanss
Evanss

Reputation: 23563

The correct method is to use filter:

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

console.table(fifteen);

Upvotes: 1

Related Questions