如何使用lodash过滤任何匹配值的数组?

时间:2017-09-18 18:16:23

标签: javascript arrays lodash

所以我有一些对象,我希望能够搜索任何值的匹配。

例如:

let arr = [
    {
        a: 'foo',
        b: 'bar'
    },
    {
        a: 'bar',
        b: 'baz'
    },
    {
        a: 'foo',
        b: 'baz'
    }
];

我希望能够过滤数组以包含任何具有值为' foo'的属性的对象。

有没有办法用lodash做到这一点?类似的东西:

_.filter(arr, function(obj) {
    return obj.anyPropertiesMatch('bar');
});

4 个答案:

答案 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()

的lodash等价物

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

进行检查

&#13;
&#13;
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;
&#13;
&#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>