使用Lodash只使用部分键字符串获取密钥

时间:2017-07-28 15:59:21

标签: javascript json lodash

如果您只知道某个键包含某个字符串,是否可以使用LoDash _.filter返回值?所以假设你有以下数据:

Mydata{
"banana" : "1"
}

我想返回包含“ana”的值?我在LoDash上找到的所有东西主要是搜索元素值而不是键。

3 个答案:

答案 0 :(得分:4)

如果要获取值的数组,哪些键符合标准, Lodash的_.filter()也适用于对象。传递给回调的第二个参数是关键。

var data = {
  "banana": 1,
  'lorem': 2,
  '123ana': 3
}

var result = _.filter(data, function(v, k) {
  return _.includes(k, 'ana');
});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

如果您想要一个符合特定标准的对象,您可以以类似的方式使用_.pickBy()

var data = {
  "banana": 1,
  'lorem': 2,
  '123ana': 3
}

var result = _.pickBy(data, function(v, k) {
  return _.includes(k, 'ana');
});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

答案 1 :(得分:1)

您可以使用原生Array#reduce达到所需的结果,并返回仅包含这些键的对象,其中包含给定的string

const obj = {
  banana: 'foo',
  hello: 'bar',
  foo: 'fzz',
  ana: 'xoo',
}

const check = (obj, str) => {
  return Object.keys(obj).reduce((s, a) => {
    if (a.includes(str)) {
      s[a] = obj[a];
    }
    return s;
  }, {});
}

console.log(check(obj, 'ana'));

答案 2 :(得分:1)

您可以先使用filter()获取字符串特定部分的密钥,然后使用map()获取值。

var data = {
  "banana": 1,
  'lorem': 2,
  '123ana': 3
}

var result = _.chain(data)
  .keys()
  .filter(e => _.includes(e, 'ana'))
  .map(e => data[e])
  .value()
  
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>