作者:辣手夏兰荇德_云 | 来源:互联网 | 2022-12-08 17:40
假设我有以下JS对象
data = {
name: "John",
dataOfBirth: "",
externalId: 2548,
email: "john@email.com",
mobile: ""
}
我将收到这样一个对象,具有很多属性可以是String
,Integer
或undefined
。为了更新数据库,我无法用空信息覆盖有效信息。
我可以尝试if (data.email === "") delete data.email
所有这些方法,但是要维持这种方法似乎不切实际。
有什么方法可以扫描所有属性,而不必命名每个属性并删除所有空/未定义的属性?
1> ibrahim tany..:
你不能这样做吗?还是我错过了什么?
Object.entries(data).filter(([k,v],i)=>!!v)
给你这个:
"[
[
"name",
"John"
],
[
"externalId",
2548
],
[
"email",
"john@email.com"
]
]"
!!
会将值转换为布尔值,在那一阶段您将null,NaN和undefined过滤掉。确实,如果要在嵌套对象上尝试此操作,则必须递归执行此操作,因为!!Object()
它始终是正确的。更好的办法是递归和异步复制对象,过滤掉虚假的原语,最后传递一个回调以进行字符串化。
编辑:
下面的人提到了一些您可能想要保留的虚假值,例如0。在这种情况下,将它们链接起来:
v===null || v===0 || !!v //null, 0 and anything not falsey, but not undefined etc.