我有一个具有多个属性的对象。我想删除任何具有虚假值的属性。
这可以用 compact
在数组上实现,但是对象呢?
原文由 user1082754 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个具有多个属性的对象。我想删除任何具有虚假值的属性。
这可以用 compact
在数组上实现,但是对象呢?
原文由 user1082754 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Underscore 版本 1.7.0 开始,您可以使用 _.pick
:
_.pick(sourceObj, _.identity)
_.pick
的第二个参数可以是用于选择值的谓词函数。选择谓词返回 真 值的值,忽略谓词返回 假 值的值。
选择_.pick(object, *keys)
返回 object 的副本,过滤为仅具有白名单 键(或有效键数组)的值。或者接受指示要选择哪些键的谓词。
_.identity
是一个返回其第一个参数的辅助函数,这意味着它也可以用作选择真值并拒绝假值的谓词函数。 Underscore 库还带有许多其他谓词,例如 _.pick(sourceObj, _.isBoolean)
将仅保留布尔属性。
如果你经常使用这种技术,你可能想让它更具表现力:
var pickNonfalsy = _.partial(_.pick, _, _.identity); // Place this in a library module or something
pickNonfalsy(sourceObj);
Underscore 版本 1.6.0 也提供了 _.pick
,但它不接受谓词函数而不是白名单。
原文由 Emil Lundberg 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
你可以制作自己的下划线插件(mixin):
然后将其用作本机下划线方法:
更新
正如 @AndreiNeculau 指出的那样,这个 mixin 影响原始对象,而原始
compact
下划线方法 返回数组的副本。为了解决这个问题并使我们的
compactObject
表现得更像它的 _表亲_,这里有一个小更新: