Поэтому у меня есть объекты, которые я хочу, чтобы иметь возможность искать любые соответствия значений.
Например:
let arr = [
{
a: 'foo',
b: 'bar'
},
{
a: 'bar',
b: 'baz'
},
{
a: 'foo',
b: 'baz'
}
];
и я хочу, чтобы иметь возможность фильтровать массив, чтобы содержать любой объект, у которого есть свойство со значением 'foo'.
Есть ли способ сделать это с помощью lodash? Что-то вроде:
_.filter(arr, function(obj) {
return obj.anyPropertiesMatch('bar');
});
Вы можете использовать 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>
Object.values
, вероятно, потребуют переноса кода в ES5.
В 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>
Это так просто:
_.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>
Используя 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>