从javascript对象中删除不需要的属性

时间:2017-03-27 18:21:01

标签: javascript lodash

我有一个类似下面的java脚本对象,包含几个字段和数组以及数组中的数组。我只对非垃圾字段感兴趣,并希望从对象中删除所有垃圾属性。我怎么能用lodash做到这一点。我可以通过使用'删除'来做到这一点,但我不想这样做,因为该列表实际上是如此巨大,我不想继续更改我的代码来写删除每当一个新的垃圾属性被添加到我的对象。

{
 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'} 
}

7 个答案:

答案 0 :(得分:11)

使用delete运算符删除特定属性

delete data.JunkOne;

或使用object.assign选择特定属性

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

编辑:

以lodash的方式做到这一点

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

var a = _.pick(data, ['counties']);

答案 1 :(得分:7)

您可以使用_.pick创建一个新对象,其中只包含原始对象中的一组特定属性:

var objectWithNoJunk = _.pick(myObject, ['state', 'country', 'counties', 'city', 'zip']);

答案 2 :(得分:3)

您可以使用lodash.pick()创建仅包含所请求密钥的对象。例如:

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']);

城市现在应该拥有所有有用的数据,而不是垃圾。

答案 3 :(得分:0)

更新

@aspillers答案与我的相同,但是更短/更好。去吧。

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

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

不需要lodash,直接ES 5。

答案 4 :(得分:0)

您可以使用Object.keys()RegExp /^Junk/来检查对象的每个属性,如果找到匹配则调用delete



var obj = {
 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 keys = Object.keys(obj);
var re = /^Junk/;
for (var i = 0; i < keys.length; i++) {
  if (re.test(keys[i])) {
   delete obj[keys[i]]
  }
}

console.log(obj)
&#13;
&#13;
&#13;

答案 5 :(得分:0)

如果你需要选择一些灵活性,lodash _.pickBy真的很棒。 例如:

const result = _.pickBy(someObject, function(value, key) {
  return key.search(/Junk/) == -1
});

如果函数返回truthy,则从对象中选择键/值对。

答案 6 :(得分:0)

失望的是,这些答案都不能在不创建新对象(副本)的情况下解决问题。我想要一个类似_.set()的东西,它可以在 path 处删除,而当路径不完全存在时不会导致错误。想到了:

_.set(obj, 'path.to.property', null);
delete obj.path.to.property;