Lodash _.omit function inside map

Bird picture Bird · May 11, 2018 · Viewed 10.2k times · Source

I'm trying to write a function, that will transform an array of objects.

var array = [{
    id: 1,
    name: 'Peter',
    age: 29,
    city: 'New York'
}, {
    id: 2,
    name: 'Peter2',
    age: 19,
    city: 'LA'
}, {
    id: 3,
    name: 'Peter3',
    age: 89,
    city: 'Rio'
}];

function mapArray(array) {
    _.map(array, object => {
        _.omit(object, ['id', 'name']);
    });

    return array;
}

And it doesn't work. As a result I get an array with all the fields. Lodash version is 4.17.4. I also use nodejs, if it matters :D

As the result I want to get array of objects like this:

[{
    age: 29,
    city: 'New York'
  }, {
    age: 19,
    city: 'LA'
  }, {
    age: 89,
    city: 'Rio'
  }];

Answer

Ori Drori picture Ori Drori · May 11, 2018

Both _.map() and _.omit() return a new array/object respectively, and don't change the original item. You have to return the results of the map, and remove the curly brackets wrapping the omit (which is inside an arrow function):

var array = [{"id":1,"name":"Peter","age":29,"city":"New York"},{"id":2,"name":"Peter2","age":19,"city":"LA"},{"id":3,"name":"Peter3","age":89,"city":"Rio"}];

function mapArray(array) {
  // return from _.map
  return _.map(array, object =>
    _.omit(object, ['id', 'name']) // return from _.omit
  );
}

// assign the results to a new variable
var result = mapArray(array);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>