我有一个 Javascript 代码,它使用 forEach 循环遍历每个数组以检查它是否满足条件。然后,它调用另一个函数。笔记: 通过遍历 arr1 和 arr2 中的每个元素,我正在检查 arr1 中的任何元素是否与 arr2 中的任何元素发生冲突。 isCollision 是一个函数,如果它们相交则计算它们的距离
arr1.forEach(x => arr2.forEach(y => isCollision(x,y)? explode(x,y): undefined));
现在,我不希望它返回 undefined。所以我想知道是否有办法获取 x 和 y 值,以便我可以将其映射到另一个函数。我试过了
arr1.filter(x => arr2.filter(y => isCollision(x,y)).map(x,y => //do something)
但现在它只返回 y 的值。有没有办法让它同时返回 x 和 y?
最佳答案
试试这个:
arr1
.map(x => ({x, y:arr2.find(y => isCollision(x,y)}))
.filter(pair => pair.y !== undefined)
首先映射到 {x:y},然后删除未找到的项。
要转换为非未定义类型,请使用另一个映射。
arr1
.map(x => ({x, y:arr2.find(y => isCollision(x,y)}))
.filter(pair => pair.y !== undefined)
.map(pair => pair as {x:Elem, y:Elem})
关于javascript - 使用过滤器时如何从两个数组返回 2 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851791/