在对象中搜索子串
我有这段代码。在对象中搜索子串
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”。 但它只输出第一项。 有人可以帮我找出原因吗?
回答:
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>
回答:
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>
你可以试试这个。希望这有助于
回答:
你可以简单地用冲压lodash#pickBy
和本地filter
做到这一点(但是你可以再次使用lodash,但不要求),在一行。
看一看:
假设filterWith
是阵列作为滤波器输入
_.pickBy(abc, (v,k) => filterWith.find(f=> k.match(f)));
下面是一个工作片段:
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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
以上是 在对象中搜索子串 的全部内容, 来源链接: utcz.com/qa/260296.html