Lodash
Вероятно, наиболее кратким рабочим решением будет использование lodash _.intersectionBy
, но для этого потребуется, чтобы ваш массив arr2
содержал объект с id
:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =[{id:1}] // <-- object with the `id`
const result = _.intersectionBy(arr, arr2, 'id');
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Другой способ сделать это с помощью lodash
будет через _.intersectionWith
, который не требует каких-либо изменений на ваших заданных входах:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1"]
const result = _.intersectionWith(arr, arr2, (o,num) => o.id == num);
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Идея состоит в том, чтобы предоставить ему пользовательскую функцию, позволяющую узнать, как сравнивать значения между двумя массивами.
ES6 и простой Javascript
Вы можете сделать это с JS только через Array.find
, если вы ищете только один элемент:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1"]
const result = arr.find(x => arr2.some(y => x.id == y))
console.log(result)
Вы можете использовать Array.filter
, если у вас больше идентификаторов в arr2
:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1", "2"]
const result = arr.filter(x => arr2.some(y => x.id == y))
console.log(result)
Поскольку у вас есть идентификаторы в arr, вы также можете просто использовать Array.map
:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1"]
const result = arr2.map(x => arr.find(y => y.id == x))
console.log(result)
Другой вариант, указанный @ibrahim mahrir
, будет через Array.find
& Array.includes
:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1"]
const result = arr.filter(x => arr2.includes(x.id.toString()))
console.log(result)