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

时间:2018-05-08 09:47:06

标签: javascript object lodash

我使用._get lib来检查对象中的两个值,然后返回默认值,如果这两个值都是空的。

例如,我有一个对象;

const obj = { person: { firsName: 'John', lastName: '' }

_get(obj, 'person.firsName', 'noname')} ${_get(state, 
'person.lastName', 'noname')}

这里的问题是,即使这个人的ATLEAST名称为空,我也只会获得“noname noname”。

我怎么能做这样的事情,特别是考虑到我在字符串文字中使用它:

`${_get(obj, '!person.firsName && !person.lasName', 'noname')} } `// pseudo

感谢

1 个答案:

答案 0 :(得分:2)

使用不defaultValue的{​​{3}}来获取这两个名称,然后在返回“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>
&#13;
&#13;
&#13;

这是获取多个路径的通用方法,过滤undefined值,如果结果数组为空,则返回defaultValue数组:

&#13;
&#13;
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
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
&#13;
&#13;
&#13;