Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

delete unwanted properties from the javascript object

I have a javascript object like the one below with several fields and arrays and arrays within arrays. I'm only interested only in non-junk fields and wanted to remove all the junk properties from the objects. How can I do that using lodash?

I can do that by using delete, but I don't want to do that because that list is huge and I don't want to keep changing my code to write a delete every time a new junk property is added to my object.

{
 state: 'New York',
 country: 'usa',
 counties : [['washington','DC'],'Long Island',['New','Jersey']], 
 city : 'Manhattan',
 zip: '43543545',
 JunkOne : ['3453454','45345','45345'],
 JunkTwo: '5454545',
 JunkThree: {adc:'4545',vdfd:'45345'} 
}
like image 969
Ajay Srikanth Avatar asked Mar 27 '17 18:03

Ajay Srikanth


4 Answers

use either delete operator to delete specific properties

delete data.JunkOne;

or use object.assign to select specific properties

var a = Object.assign({}, { counties: data.counties});

EDIT:

Doing it lodash way would be

var a = _.omit(data, ['JunkOne']);

or

var a = _.pick(data, ['counties']);
like image 70
binariedMe Avatar answered Oct 16 '22 07:10

binariedMe


You can use lodash.pick() to create an object with only the requested keys. For example:

var city = {
  state: 'New York',
  country: 'usa',
  counties : [['washington','DC'],'Long Island',['New','Jersey']], 
  city : 'Manhattan',
  zip: '43543545',
  JunkOne : ['3453454','45345','45345'],
  JunkTwo: '5454545',
  JunkThree: {adc:'4545',vdfd:'45345'}
}
var lodash = require('lodash');
city = lodash.pick(city, ['state', 'country', 'counties','city','zip']);

City now should have all the useful data, and none of the junk.

like image 45
Nicolas Budig Avatar answered Oct 16 '22 07:10

Nicolas Budig


You can use _.pick to create a new object with only a specific set of properties from your original object:

var objectWithNoJunk = _.pick(myObject, ['state', 'country', 'counties', 'city', 'zip']);
like image 24
apsillers Avatar answered Oct 16 '22 05:10

apsillers


UPDATE

@aspillers answer is the same as mine but waaay shorter/better. Go with that.

var listOfGoodProps = [
  "city",
  "county",
  ...
];

Object.keys(yourObj).reduce(function(acc, key) {
  if (listOfGoodProps.indexOf(key) !== -1)
    acc[key] = yourObj[key];
  return acc;
}, {});

No lodash needed, straight up ES 5.

like image 2
Jared Smith Avatar answered Oct 16 '22 06:10

Jared Smith