#javascript #ecmascript-6 #lodash
#javascript #ecmascript-6 #Lodash
Вопрос:
Я пытаюсь отфильтровать данные, которые присутствуют в массиве, используя Lodash. Я пытаюсь фильтровать как SQL В предложении.
ex: - select * from Test where id IN (2,4,5,67);
JSON:
storedData = [
{
"id" : 1,
"name" : "ABC"
},
{
"id" : 2,
"name" : "XYZ"
},
{
"id" : 3,
"name" : "BVX"
},
{
"id" : 4,
"name" : "OOO"
}
]
Критерии поиска:
[2,4,5,67]
Требуемый вывод:
output = [
{
"id" : 2,
"name" : "XYZ"
},
{
"id" : 4,
"name" : "OOO"
}
]
Ниже приведен мой код, который я пытался реализовать
output = _.filter(storedData, (value) => {
return value.id == 2 || value.id == 4 || value.id == 5 || value.id == 67
});
Не могли бы вы, пожалуйста, помочь мне, как фильтровать, как В предложении?
Ответ №1:
Вы можете найти пересечение между двумя массивами с помощью intersectionWith
, что позволяет вам обеспечить обратный вызов и сохранит все элементы из первого массива, для которого возвращается обратный вызов true
.
Смотрите пример ниже:
const storedData = [ { "id" : 1, "name" : "ABC" }, { "id" : 2, "name" : "XYZ" }, { "id" : 3, "name" : "BVX" }, { "id" : 4, "name" : "OOO" } ];
const search = [2,4,5,67];
const res = _.intersectionWith(storedData, search, (o, n) => o.id === n);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Ответ №2:
Использовать .includes
_.filter(storedData, (value) => _.includes(criteria, value.id))
const storedData = [
{
id: 1,
name: "ABC",
},
{
id: 2,
name: "XYZ",
},
{
id: 3,
name: "BVX",
},
{
id: 4,
name: "OOO",
},
]
const criteria = [2, 4, 5, 67]
const output = _.filter(storedData, (value) => _.includes(criteria, value.id))
console.log(output)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>