簡體   English   中英

typescript 中的嵌套數組 filter() 函數 - 總是返回 true?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM