如果您只知道某个键包含某个字符串,是否可以使用LoDash _.filter
返回值?所以假设你有以下数据:
Mydata{
"banana" : "1"
}
我想返回包含“ana”的值?我在LoDash上找到的所有东西主要是搜索元素值而不是键。
答案 0 :(得分:4)
如果要获取值的数组,哪些键符合标准,
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>
答案 1 :(得分:1)
您可以使用原生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'));
答案 2 :(得分:1)
您可以先使用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>