我有这个对象,其中addon_sizes
键是动态的,即"1","2", "3", "4"
:
const sizes = {
"addon_sizes": {
"1": ["a", "b"],
"2": ["c"],
"3": null,
"4": []
}
}
我需要删除此对象中值为null/undefined/empty数组的所有键/值对。
因此,应从列表中删除键“3”和“4”。
到目前为止我所尝试的是:
const newObj = R.reject(R.anyPass([R.isEmpty, R.isNil]))(sizes.addon_sizes);
但这并没有删除null或空值。
3条答案
按热度按时间fv2wmkja1#
通过拾取所有不为空或nil的属性来创建新对象:
2uluyalo2#
既然你已经标记了javascript:
您可以遍历对象条目,并使用
delete
关键字删除负属性或负长度属性。yhqotfr83#
这取决于你对
remove
的定义。如果你想改变你的原始对象,那么Ramda不会提供任何帮助。如果你想创建一个没有这些属性的副本,你的代码看起来已经工作了,尽管它仍然需要应用到你的输入对象。这里我们使用over
和lensProp
来实现lensProp ('addon_sizes')
创建了一个lens
,它专注于addon_sizes
属性,over
使用这个镜头和基于reject
的函数来创建一个函数,该函数将创建原始对象的副本,并从addon_sizes
中删除空值或nil值。当只使用两个函数时,我发现
either (f, g)
比anyPass ([f, g])
更具语义性,所以我更喜欢这个版本,但它做的是同样的事情: