javascript - 如何使用 lodash 的 ._get 方法检查路径的 2 个值
问题描述
我正在使用._get
lib检查对象中的两个值,然后仅在这两个值都为空时才返回默认值。
例如,我有一个对象;
const obj = { person: { firsName: 'John', lastName: '' }
_get(obj, 'person.firsName', 'noname')} ${_get(state,
'person.lastName', 'noname')}
这里的问题是,即使这个人至少有一个名字是空的,我也只会得到“noname noname”。
我怎么能做这样的事情,特别是考虑到我在字符串文字中使用它:
`${_get(obj, '!person.firsName && !person.lasName', 'noname')} } `// pseudo
谢谢
解决方案
使用_.get()
withoutdefaultValue
获取两个名称,然后在返回 `noname' 之前检查它们是否存在:
const getName = (obj) => {
const firstName = _.get(obj, 'person.firsName', '')
const lastName = _.get(obj, 'person.lastName', '')
return firstName || lastName ? `${firstName} ${lastName}`.trim() : 'noName';
}
const obj = { person: { firsName: 'John' } }
console.log(getName(obj)) // John
console.log(getName({})) // noname
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
这是一个通用方法,它获取多个路径,过滤undefined
值,如果结果数组为空,则返回一个defaultValue
数组:
const getMultiple = (obj, paths, defaultValue) => {
const values = paths
.map((path) => _.get(obj, path))
.filter((v) => !_.isUndefined(v));
return values.length ? values : [defaultValue];
}
console.log(
getMultiple({ person: { firsName: 'John', lastName: 'Smith' }}, ['person.firsName', 'person.lastName'], 'noname').join(' ')
) // John Smith
console.log(
getMultiple({ person: { firsName: 'John' }}, ['person.firsName', 'person.lastName'], 'noname').join(' ')
) // John
console.log(
getMultiple({}, ['person.firsName', 'person.lastName'], 'noname').join(' ')
) // noname
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
推荐阅读
- javascript - 2d-transform - 如何保持位置?
- php - PHP删除多维数组中两个数组的索引位置为空
- javascript - ExtJS 将 IFrame 添加到选项卡
- abap - 用逗号加入字符串列表
- powerbi - 如何在线powerbi中mysql连接错误
- javascript - Redux Saga 观看多项动作
- angular - 为什么我们需要 Angular 中的 forRoot() 方法
- firebase - Firebase 实时数据库中的存储大小是如何计算的?
- excel - 发布 RunTime 91 数据输入
- .net - 使用 xunit 使用 .Net Framework 4.7.2 在 jenkins 中生成 .TRX 文件