所以我有一些对象,我希望能够搜索任何值的匹配。
例如:
let arr = [
{
a: 'foo',
b: 'bar'
},
{
a: 'bar',
b: 'baz'
},
{
a: 'foo',
b: 'baz'
}
];
我希望能够过滤数组以包含任何具有值为' foo'的属性的对象。
有没有办法用lodash做到这一点?类似的东西:
_.filter(arr, function(obj) {
return obj.anyPropertiesMatch('bar');
});
答案 0 :(得分:2)
您可以将Array#filter与Array#some:
一起使用
const val = 'foo';
const arr = [{"a":"foo","b":"bar"},{"a":"bar","b":"baz"},{"a":"foo","b":"baz"}];
const result = arr.filter((o) => Object.values(o).some((v) => v === val));
console.log(result);
或使用_.includes()
:
const val = 'foo';
const arr = [{"a":"foo","b":"bar"},{"a":"bar","b":"baz"},{"a":"foo","b":"baz"}];
const result = _.filter(arr, (o) => _.includes(o, val));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
答案 1 :(得分:1)
在lodash中,您可以使用some
方法验证该对象是否具有提供值的字段:
let arr = [
{ a: 'foo', b: 'bar' },
{ a: 'bar', b: 'baz' },
{ a: 'foo', b: 'baz' }
];
let result = _.filter(arr, obj => _.some(obj, val => val === 'foo'));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
答案 2 :(得分:0)
使用LoDash _.filter
根据对象值过滤数组,使用_.values
获取并使用_.includes
let arr = [
{
a: 'foo',
b: 'bar'
},
{
a: 'bar',
b: 'baz'
},
{
a: 'foo',
b: 'baz'
}
];
let res = _.filter(arr, o => _.includes(_.values(o), 'foo'));
console.log(res)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
答案 3 :(得分:0)
就这么简单:
_.filter(arr, o=>_.includes(o,'foo'));
你可以直接对任何对象使用lodash数组函数,它会考虑每个元素的每个值。
以下是您的工作示例:
let arr = [
{
a: 'foo',
b: 'bar'
},
{
a: 'bar',
b: 'baz'
},
{
a: 'foo',
b: 'baz'
}
];
let res = _.filter(arr, o=>_.includes(o,'foo'));
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>