使用Lodash获取密钥只使用部分密钥字符串
问题描述:
如果只知道密钥包含某个字符串,是否可以使用LoDash _.filter
返回值?假设您有以下数据:使用Lodash获取密钥只使用部分密钥字符串
Mydata{
"banana" : "1"
}
我想返回包含“ana”的值吗?我在LoDash上找到的所有内容主要是搜索元素值而不是键。
答
如果你想要得到的值,键符合的标准, 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>
答
您可以使用原生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'));
答
你可先用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>
我设置你的答案的答案,因为它是一个更优雅的解决方案 – WJM