我有一个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属性应该保留。
当前回答
考虑到undefined == null,我们可以这样写:
let collection = {
a: undefined,
b: 2,
c: 4,
d: null,
}
console.log(_.omit(collection, it => it == null))
// -> { b: 2, c: 4 }
JSBin例子
其他回答
只是:
_.omit(my_object, _.isUndefined)
上面没有考虑到空值,因为它们在原始示例中没有出现,只在主题中提到过,但我保留了它,因为它很优雅,可能有它的用途。
下面是完整的示例,虽然不那么简洁,但更完整。
var obj = { a: undefined, b: 2, c: 4, d: undefined, e: null, f: false, g: '', h: 0 };
console.log(_.omit(obj, function(v) { return _.isUndefined(v) || _.isNull(v); }));
对于深嵌套对象,您可以使用我的代码片段为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
};
正确答案是:
_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)
结果是:
{b: 1, d: false}
其他人给出的另一种说法:
_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);
也将删除这里不需要的假值。
默认情况下,pickBy使用identity:
_.pickBy({ a: null, b: 1, c: undefined, d: false });
为了完成其他答案,在lodash 4中只忽略undefined和null(而不是像false这样的属性),你可以在_.pickBy中使用谓词:
_。pickBy(obj, v !== null && v !== undefined)
例子如下: Const obj = {a: undefined, b: 123, c: true, d: false, e: null}; const filteredObject = _。pickBy(obj, v => v !== null && v !== undefined); console.log = (obj) => document.write(JSON. log)stringify(filteredObject, null, 2)); console.log (filteredObject); < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js " > < /脚本>