我有一个Javascript对象像:

var my_object = { a:undefined, b:2, c:4, d:undefined };

如何删除所有未定义的属性?False属性应该保留。


当前回答

正确答案是:

_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)

结果是:

{b: 1, d: false}

其他人给出的另一种说法:

_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);

也将删除这里不需要的假值。

其他回答

正确答案是:

_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)

结果是:

{b: 1, d: false}

其他人给出的另一种说法:

_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);

也将删除这里不需要的假值。

因为你们中的一些人可能已经想到了这个问题,想要明确地删除undefined,你可以使用:

Lodash方法的组合 _。_.isUndefined omitBy(对象) rundef包,它只删除未定义的属性 rundef(对象)


如果需要递归地删除未定义的属性,rundef包还有一个递归选项。

rundef(object, false, true);

有关详细信息,请参阅文档。

省略所有假值,但保留布尔原语,这个解决方案有帮助。

_.omitBy(fields, v => (_.isBoolean(v)||_.isFinite(v)) ? false : _.isEmpty(v));

让田野= str:’CAD’, numberStr:’123’, 123号, boolStrT:’true’, boolStrF:’false’, 假的,假的, 真实, undef: undefined, mo:零, emptyStr:”, 阵列:[1,2,3], emptyArr: [] ); 让诺布= _。omitBy (fields, v = > (_ isBoolean (v) | | _ isFinite (v)) ?伪造:_.isEmpty(v); 游戏机。log (nobj); < script src =“https://cdn.jsdelivr.net/npm/lodash@4。11月17日/ lodash min。主持人" > / < script >

用于深嵌套的对象和数组。并从字符串和NaN中排除空值

function isBlank(value) {
  return _.isEmpty(value) && !_.isNumber(value) || _.isNaN(value);
}
var removeObjectsWithNull = (obj) => {
  return _(obj).pickBy(_.isObject)
    .mapValues(removeObjectsWithNull)
    .assign(_.omitBy(obj, _.isObject))
    .assign(_.omitBy(obj, _.isArray))
    .omitBy(_.isNil).omitBy(isBlank)
    .value();
}
var obj = {
  teste: undefined,
  nullV: null,
  x: 10,
  name: 'Maria Sophia Moura',
  a: null,
  b: '',
  c: {
    a: [{
      n: 'Gleidson',
      i: 248
    }, {
      t: 'Marta'
    }],
    g: 'Teste',
    eager: {
      p: 'Palavra'
    }
  }
}
removeObjectsWithNull(obj)

结果:

{
   "c": {
      "a": [
         {
            "n": "Gleidson",
            "i": 248
         },
         {
            "t": "Marta"
         }
      ],
      "g": "Teste",
      "eager": {
         "p": "Palavra"
      }
   },
   "x": 10,
   "name": "Maria Sophia Moura"
}

对于那些想要从对象数组中删除并使用lodash的人,你可以这样做:


 const objects = [{ a: 'string', b: false, c: 'string', d: undefined }]
 const result = objects.map(({ a, b, c, d }) => _.pickBy({ a,b,c,d }, _.identity))

 // [{ a: 'string', c: 'string' }]

注意:如果你不想销毁,你不必销毁。