【发布时间】:2020-12-13 18:52:20
【问题描述】:
我有一个非常简单的函数来测试两条线是否相交。交集函数本身按预期工作,但是当我尝试在嵌套的 filter() 函数中使用它时,外部过滤器函数总是返回 true:
const intersectingLines: Line[] = poly1Lines.filter(poly1Line => {
return poly2Lines.filter(poly2Line => {
return (isIntersecting(poly1Line, poly2Line));
});
});
我正在嵌套过滤器函数,以便我遍历第一个多边形测试中的所有线,如果它与第二个中的任何线相交(类似于在第一个数组上的外部循环的每次迭代中循环第二个数组)。
我怀疑这是因为第二个过滤器永远不会返回错误,所以我直接检查了过滤后数组的长度,其工作原理如下:
const intersectingLines: Line[] = poly1Lines.filter(poly1Line => {
const filteredLines = poly2Lines.filter(poly2Line => {
return (isIntersecting(poly1Line, poly2Line));
});
return (filteredLines.length > 0)
});
与简单地嵌套过滤器的返回相比,这感觉很hacky且可读性差。我确信我错误地嵌套了过滤器函数,但我几乎找不到有关如何执行此操作的文档。有没有比检查第二个过滤数组的长度更好的方法?
【问题讨论】:
-
不是 "[]" 评估为真吗?所以内部过滤器总是真实的,因此外部过滤器中的所有元素都保持未过滤。
-
是的,我怀疑这是问题所在,但 Nina Sholz 的回答表明嵌套过滤器调用是可能的,因此假设我一定做错了:stackoverflow.com/questions/38039311/…
-
@Harry 如果你仔细观察,你会发现它也使用了
.some,以及@Bergi 的。顺便说一句,不要说“Nina Scholz 的答案”,您可以使用a link to the answer 下方的 分享 按钮。
标签: javascript typescript filter functional-programming