[英]Nested array filter() functions in typescript - always returns true?
我有一個非常簡單的 function 來測試兩條線是否相交。 交集 function 本身按預期工作,但是當我嘗試在嵌套的filter()
函數中使用它時,外部過濾器 function 始終返回 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)
});
與簡單地嵌套過濾器的返回相比,這感覺很笨拙且可讀性差。 我確信我嵌套了過濾器函數是錯誤的,但是我幾乎沒有找到關於如何做到這一點的文檔。 有沒有比檢查第二個過濾數組的長度更好的方法呢?
實際上, filter
總是返回一個數組,作為 object 是真實的。
正確的解決方案不是使用.filter(…).length
來檢查某些數組元素是否與謂詞匹配,而是使用.some(…)
:
const intersectingLines: Line[] = poly1Lines.filter(poly1Line =>
poly2Lines.some(poly2Line =>
isIntersecting(poly1Line, poly2Line)
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.