簡體   English   中英

使用while循環查找JS數組中最常見的項目?

[英]Find most frequent item of a JS array with while loop?

我創建了一個 function ,它找到一個帶有兩個 for 循環的 JS 數組中最頻繁的項目,並顯示該項目以及數組中有多少次。 如何使用 while 循環來做到這一點?

 var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; //ta = times appeared / m = max / arrchar = array character var ta = 1; var m = 0; var arrchar; for (var i = 0; i < arr.length; i++) { for (var j = i; j < arr.length; j++) { if (arr[i] == arr[j]) m++; if (ta < m) { ta = m; arrchar = arr[i]; } } m = 0; } console.log(arrchar + "(" + ta + ")");

使用 while 循環的目的是使用退出條件。 由於沒有退出條件,我基本上創建了一個相當有效的 for 循環算法,只是用 while 循環替換了 for 循環。

 var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; var occurences = {}; var max = 0; var champion; var index = 0; while (index < arr.length) { var item = arr[index]; occurences[item] = (occurences[item] || 0) + 1; if (occurences[item] > max) { max = occurences[item]; champion = item; } index += 1; } console.log(`${champion} has ${max} occurences`);

不幸的是,上面的代碼總是將3"3"視為相同的值。 如果您不希望這種情況發生,那么您應該改用 map。

 var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; var occurences = new Map(); var max = 0; var champion; var index = 0; while (index < arr.length) { var item = arr[index]; var newSize = (occurences.get(item) || 0) + 1; occurences.set(item, newSize); if (newSize > max) { max = newSize; champion = item; } index += 1; } console.log(`${champion} has ${max} occurences`);

您可以使用數組減速器:

 const arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; let max, winner; const arrReduce = arr.reduce((acc, curr, index) => { acc[curr] = acc[curr]? acc[curr] += 1: 1; if(max < acc[curr]) winner = curr max = max > acc[curr]? max: acc[curr]; return acc; }, {}); console.log(max, winner)

您可以在 while 循環中使用過濾器方法。 為每個 arr 索引創建一個過濾數組。 如果過濾后數組的長度大於maxOccurence,則將過濾后數組的長度設置為maxOccurence。 您可以嘗試其他數組原型方法。 可能有更簡單的方法。

 var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3]; var char = ""; var maxOccurence = 0; var i = 0; while(i < arr.length){ var filteredArr = arr.filter(x=> x === arr[i]); if(filteredArr.length > maxOccurence){ char = arr[i]; maxOccurence = filteredArr.length; } i++; } console.log(char + "(" + maxOccurence + ")");

運行以下代碼。 它會給你最期待的結果。

const arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];

// result array
var result = [];

$.each(arr, function( index, value ) {
    if(result[value] === undefined) 
        result[value] = 1;
    else
        result[value] = result[value] + 1;
});

console.log(result);

暫無
暫無

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

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