![](/img/trans.png)
[英]Element-Wise Arithmetic Operations in Jagged Multidimensional Arrays in JavaScript
[英]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.