簡體   English   中英

Java中帶有1D數組的鋸齒狀多維數組的明智篩選

[英]Element-Wise Filtering of Jagged Multidimensional Array with 1D array in Javascript

 const Amaths = [ [1, 2, 3, 5, 6, 7, 8], [4, 5, 6, 8], [12, 3, 4] ] const checks = [2.5, 4.01, 5]; const picks = []; for (let j = 0; j < Amaths.length; j++) { for (let k = 0; k < Amaths[j].length; k++) { if (Amaths[j][k] > checks[j]) { picks.push(Amaths[j][k]); } } } console.log("picks", picks) 

我想過濾鋸齒狀的多維數組元素而不會展平輸出數組; 在此示例中,為“點”。

我已經嘗試過使用for循環,但是輸出“點”卻變平了。 另外,我已經使用了mathjs庫函數,但是似乎該庫中的逐元素算術運算僅適用於無鋸齒的多維數組。

預期結果應為:

 const picks = [ [3, 5, 6, 7, 8], [5, 6, 8], [12] ] console.log ("expected picks", picks) 

使用.map轉換為另一個2d數組,在每個子數組上調用.filter ,同時與要迭代的子數組索引處的checks進行比較:

 const Amaths = [ [1, 2, 3, 5, 6, 7, 8], [4, 5, 6, 8], [12, 3, 4] ] const checks = [2.5, 4.01, 5]; const result = Amaths.map( (subarr, i) => subarr.filter( num => num >= checks[i] ) ); console.log(result); 

要修復原始代碼,您必須在每個外部迭代中推送一個新的子數組以進行picks

 const Amaths = [ [1, 2, 3, 5, 6, 7, 8], [4, 5, 6, 8], [12, 3, 4] ] const checks = [2.5, 4.01, 5]; const picks = []; for (let j = 0; j < Amaths.length; j++) { picks.push([]); for (let k = 0; k < Amaths[j].length; k++) { if (Amaths[j][k] > checks[j]) { picks[j].push(Amaths[j][k]); } } } console.log("picks", picks) 

(但是數組方法可能是一個更好的選擇,它們更加簡潔易懂)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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