javascript - 如何使用 lodash 的 ._get 方法检查路径的 2 个值

标签 javascript object lodash

我正在使用 ._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()不使用 defaultValue 获取两个名称,然后在返回 `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 - 如何使用 lodash 的 ._get 方法检查路径的 2 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50230666/

相关文章:

javascript - 使用 d3 的 chrome 扩展

javascript - 无法在状态修改方法中访问状态对象的对象属性(TypeError)

javascript - 从具有多个属性的数组映射 json 数据

javascript - 嵌套 _.max() 与 lodash

javascript - jQuery 如何获取上次单击元素的类或 ID?

javascript - 使用 scrapy 从动态网站复制数据

javascript - 如何获取 Backbone 集合并传递给 View ?

关于转换的Java编译问题

javascript - 对象构造函数作为大对象中的函数

javascript - lodash cloneDeep 从对象中删除代理