我试图在这个对象数组中返回匹配的ID:
const arr = [{id:1,name:'Harry'},{id:2,name:'Bert'}]
const arr2 =["1"]
Run Code Online (Sandbox Code Playgroud)
如何在arr中返回值为1的id?
Akr*_*ion 16
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)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
执行此操作的另一种方法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)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
我们的想法是为它提供一个自定义函数,以了解如何比较两个数组之间的值.
ES6和普通的Javascript
Array.find如果您只查找一个项目,则只能通过JS执行此操作:
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)Run Code Online (Sandbox Code Playgroud)
Array.filter如果你有更多的ID,你可以使用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)Run Code Online (Sandbox Code Playgroud)
由于你在arr中有id,你也可以使用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)Run Code Online (Sandbox Code Playgroud)
提到的另一种选择@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)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |