在对象中搜索子字符串

时间:2017-12-03 09:57:49

标签: javascript lodash

我有这个代码。

var abc = { QSX: 'V',WRT: 'VC',ETH: 'VC',RHY: 'VC',TFG: 'VC',YKL: 'VC'}
var filtered = _.pick(abc, ['HY', 'H']); //Lodash
console.log(filtered);

应该输出以下内容:

  

过滤= {RHY:' VC',ETH:' VC'}

因为这些只是包含子串的两个项目' HY'和' H'。 但它只输出第一项。 有人可以帮我弄清楚为什么好吗?

3 个答案:

答案 0 :(得分:1)

Lodash匹配_.pick中的确切属性名称。它不会选择与给定项目部分匹配的属性。

如果您想要部分匹配,则应使用_.pickBy代替。

var abc = { QSX: 'V',WRT: 'VC',ETH: 'VC',RHY: 'VC',TFG: 'VC',YKL: 'VC'}
var filtered = _.pick(abc, ['HY', 'H']); //Lodash
console.log(filtered);
filtered = _.pickBy(abc, (v, k) => k.includes('HY') || k.includes('H'));
console.log(filtered);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

答案 1 :(得分:1)

var abc = {
  QSX: 'V',
  WRT: 'VC',
  ETH: 'VC',
  RHY: 'VC',
  TFG: 'VC',
  YKL: 'VC'
}
var filterBase = ['HY', 'H']

var filtered = _.pickBy(abc, function(value, key) {
  var isThere = _.find(filterBase, function(o) {
   
    return key.indexOf(o) !== -1
  })
  return isThere
}); //Lodash
console.log(filtered);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

你可以试试这个。希望这有帮助

答案 2 :(得分:0)

你可以简单地通过打孔lodash#pickBy和本地filter(然而你可以再次使用lodash,但不是必需的),在一个班轮中。

看看:

假设filterWith是数组作为过滤器输入

_.pickBy(abc, (v,k) => filterWith.find(f=> k.match(f)));

这是一个工作片段:

&#13;
&#13;
var abc = { QSX: 'V',WRT: 'VC',ETH: 'VC',RHY: 'VC',TFG: 'VC',YKL: 'VC'};
var filterWith = ['HY', 'H'];

var filtededData = _.pickBy(abc, (v,k) => filterWith.find(f=> k.match(f)));

console.log(filtededData)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;