我有这个代码。
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'。 但它只输出第一项。 有人可以帮我弄清楚为什么好吗?
答案 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)));
这是一个工作片段:
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;