如何与lodash交叉?

bie*_*ier 9 javascript lodash

我试图在这个对象数组中返回匹配的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)