在对象中搜索子串

我有这段代码。在对象中搜索子串

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

回到顶部