Как отфильтровать массив по любому подходящему значению, используя lodash?

1

Поэтому у меня есть объекты, которые я хочу, чтобы иметь возможность искать любые соответствия значений.

Например:

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

и я хочу, чтобы иметь возможность фильтровать массив, чтобы содержать любой объект, у которого есть свойство со значением 'foo'.

Есть ли способ сделать это с помощью lodash? Что-то вроде:

_.filter(arr, function(obj) {
    return obj.anyPropertiesMatch('bar');
});
Теги:
arrays
lodash

4 ответа

3

Вы можете использовать Array.filter() и проверить, существует ли значение, используя Object.values() чтобы получить массив значений, и Array.includes() чтобы проверить, включают ли они val:

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).includes(val));

console.log(result);

Или эквивалент _.includes() с использованием _.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
    Обратите внимание, что функции стрелок и Object.values , вероятно, потребуют переноса кода в ES5.
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>
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>
0

Используя LoDash _.filter для фильтрации массива на основе значений объекта, _.values с _.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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню