javascript - lodash 可以删除仅包含 null 或 undefined 的数组吗?
问题描述
我有一个看起来像这样的数据对象:
var obj = {
"one": null,
"two": undefined,
"three": [undefined],
"four": "valid value"
}
我需要结束这个:
{
"four": "valid value"
}
我正在使用 lodash 来尝试实现这一点,它让我在其中取得了部分进展:
obj = _.pick(obj, _identity);
这给了我:
{
"three": [undefined],
"four": "valid value"
}
是否有一种以 lodash 为中心的方法,不仅可以删除值为 null 或 undefined 的键,还可以删除值为仅包含 undefined 或 null 的数组的键?我知道一般来说有很多方法可以做到这一点,我只是想知道 lodash 是否有一些方法可以做到这一点。
解决方案
对于对象(包括数组)和原语,您需要使用_.omitBy()
with 。在检查数组是否为空以忽略值之前,您还应该数组:_.empty()
!value
_.compact()
falsy
var obj = {
"one": null,
"two": undefined,
"three": [undefined],
"four": "valid value",
}
var fn = o => _.omitBy(o, v => _.isObject(v) ?
_.isEmpty(_.isArray(v) ? _.compact(v) : v)
:
!v
)
var result = fn(obj)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
如果要删除falsy
嵌套对象/数组中的值和空数组/对象,请_.transform()
递归使用。用于从数组_.compact()
中删除值,并检查:falsy
_.isEmpty()
Boolean
如果您需要递归解决方案,您可以使用_.transform()
:
var obj = {
"one": null,
"two": undefined,
"three": [undefined],
"four": "valid value",
"five": [undefined, 1],
"six": [{ a: null, b: [] }, undefined]
}
var cleanArray = (o) => _.isArray(o) ? _.compact(o) : o;
var clean = o => _.transform(o, (r, v, k) => {
var isObject = _.isObject(v)
var val = isObject ? cleanArray(clean(v)) : v
var keep = isObject ? !_.isEmpty(val) : Boolean(val)
if(keep) r[k] = val
})
var result = clean(obj)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
推荐阅读
- linux - 如何从命令行隐藏 curl 参数?
- ios - 从 App Store 下载的 App 崩溃,TestFlight 运行良好
- apache - repo.maven.apache.org 的 Nexus 代理不起作用
- javascript - Angular 5 应用程序无法在 Safari 移动浏览器中呈现
- android - 简单的 Firebase Auth UI 检查和应用程序崩溃
- python - Matplotlib AttributeError:模块“matplotlib.cbook”没有属性“_define_aliases”
- login - google user_id 可以改吗?
- html - 为什么“a@a”会通过电子邮件输入的内置验证?
- laravel - Laravel 5.7 中的会话冲突
- javascript - Javascript + Firebase 博客 addpost 函数 firstId 返回 undefined