簡體   English   中英

過濾數組並將其轉換為2D數組

[英]Filtering an array and converting it to a 2D array

昨天我看到了這篇有趣的文章,並認為了解如何通過對給定參數進行排序來創建2D數組非常重要: 如何使偶數數組首先打印而不是賠率?

以下是Ori Drori的代碼段。

我很想知道哪一行代碼,以及哪個表達式對數據進行排序並創建2D數組。 我認為這與[numbersArray [i]%2]有關,但是余數運算符不是返回剩余的余數嗎?

同樣,這有點令人困惑,因為它只是為一個數組設置了一個括號並使用push()來創建2個不同的數組。

任何可以幫助我理解這一點的參考資料也將不勝感激-謝謝!

 var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; function divider(numbersArray) { var evensOdds = [[], []]; for (var i = 0; i < numbersArray.length; i++) { evensOdds[numbersArray[i] % 2].push(numbersArray[i]); } return evensOdds; } console.log(divider(numbersArray)); 

evensOdds具有2個數組元素。 evensOdds[0]表示第一個數組,該數組將保留偶數。 evensOdds[1]是第二個元素,將保留奇數。

當您% 2個偶數時,它將導致01為奇數。 因此,當遍歷數組時,您將% 2 ,將返回01 ,這使您可以訪問evensOdds數組中的第一個或第二個數組並將其插入。

結果數組未排序,但確實代表了偶數和奇數之間的分隔。 要獲得排序結果,您將需要以下內容:

 var numbersArray = [1,2,34,54,55,34,32,11,19,17,54,66,13]; function divider(numbersArray) { var evensOdds = [[], []]; for (var i = 0; i < numbersArray.length; i++) { evensOdds[numbersArray[i] % 2].push(numbersArray[i]); } return evensOdds.map(array=> array.sort((a,b)=>ab)); } console.log(divider(numbersArray)); 

在共享代碼中, evensOdds[numbersArray[i] % 2]行是過濾數字並將其使用從numbersArray[i] % 2表達式返回的索引01將其插入相應array的部分:

如果返回0 ,則為even ,將被壓入第一個array否則,返回1odd ,並將被壓入第二個數組。

另一種選擇:

那么你可以簡單地使用Array.filter()方法來過濾都evensodds陣列:

演示:

 var numbersArray = [1, 2, 34, 54, 55, 34, 32, 11, 19, 17, 54, 66, 13]; var evens = numbersArray.filter(function(el) { return el % 2 == 0; }); var odds = numbersArray.filter(function(el) { return el % 2 == 1; }); console.log(evens); console.log(odds); 

暫無
暫無

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

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