我有一个Javascript对象像:
var my_object = { a:undefined, b:2, c:4, d:undefined };
如何删除所有未定义的属性?False属性应该保留。
我有一个Javascript对象像:
var my_object = { a:undefined, b:2, c:4, d:undefined };
如何删除所有未定义的属性?False属性应该保留。
当前回答
如果使用lodash,可以使用_.compact(array)从数组中删除所有错误值。
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
https://lodash.com/docs/4.17.4#compact
其他回答
你可以简单地用_连接_.省略()。isUndefined和_。isNull组合,并获得懒惰求值的结果。
Demo
var result = _(my_object).omit(_.isUndefined).omit(_.isNull).value();
2016年3月14日更新:
正如dylants在评论部分中提到的,您应该使用_.omitBy()函数,因为它使用谓词而不是属性。对于lodash 4.0.0及以上版本,您应该使用此选项。
DEMO
var result = _(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();
2016年6月1日更新:
正如Max Truxa所评论的,lodash已经提供了一个替代的_。isNil,检查null和undefined:
var result = _.omitBy(my_object, _.isNil);
如果使用lodash,可以使用_.compact(array)从数组中删除所有错误值。
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
https://lodash.com/docs/4.17.4#compact
对于那些想要从对象数组中删除并使用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' }]
注意:如果你不想销毁,你不必销毁。
用于深嵌套的对象和数组。并从字符串和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 > 4
const removeObjectsWithNull = (obj) => {
return _(obj)
.pickBy(_.isObject) // get only objects
.mapValues(removeObjectsWithNull) // call only for values as objects
.assign(_.omitBy(obj, _.isObject)) // save back result that is not object
.omitBy(_.isNil) // remove null and undefined from object
.value(); // get value
};