Javascript Problems — Select only object from array

The goal of this exercise is to take an array of items: objects, arrays, numbers, strings and null, and return only true objects.  Both null and arrays are objects in Javascript, so I have to test for those specifically.  First I used the reduce method.  On line 7, I test if an item is null or an array and exclude it from the accumulator.  Then on line 11, I test to see if it is an object (that is not null or an array) and add it to the accumulator.  On line 17 I skip all other types (number and string) by returning the accumulator without adding the item.

// Shorten array to consist only of the two objects

const arr=[{one: 'two'}, 3, 'four', {five: 'six'}, null, undefined, 7, ['eight']];

function returnObj(a,b) {
  //check if item is null or array and ignore
  if (b===null || Array.isArray(b)) {
    return a;
  // if b is an object that is not null or array, 
  // add to accumulator  
  } else if (typeof(b) === 'object') {
    a.push(b);
    console.log('a.push', a);
    return a;
  } else {
  // otherwise ignore it (string and number)  
    return a;
  }
}

const output=arr.reduce(returnObj,[]);
console.log("OUTPUT:",output);
// OUTPUT: [ { one: 'two' }, { five: 'six' } ]

Next, I doing it using the filter() method, which makes the code much more streamlined.  I do all the testing on line 5 to make sure the item is an object, but is not null and not an array.

// OPTION 2 - FILTER METHOD
const arr=[{one: 'two'}, 3, 'four', {five: 'six'}, null, undefined, 7, ['eight']];

function returnObj(item) {
  return item !==null && !Array.isArray(item) && typeof(item) === 'object';
}

const output = arr.filter(returnObj);
console.log("OUTPUT:", output);
// OUTPUT: [ { one: 'two' }, { five: 'six' } ]

 

Leave a Reply

Your email address will not be published. Required fields are marked *