2011-04-19 115 views
0

所以我有一個數組。該陣列具有字符串值內,可每一​​次改變:迭代通過一個數組,並返回每個jQuery中存在多少個

var array = ['1','2','3','4','5']; 

或有時:

var array = ['1','4','3','4','4']; 

甚至:

var array = ['1','3','3','4','4']; 

我怎麼會去通過這個數組迭代,盤算取出哪個值出現最多然後顯示它。另外,我會如何讓它變得更聰明,以便了解有時兩個值之間存在聯繫(如上面最後一個數組中的情況),然後顯示通知我值「3」和「4」相關的信息是綁定的...或者如果沒有多次出現的值,則顯示所有值。思考?

+0

你想從陣列中除了獲得出現最值刪除重複? – Eli 2011-04-19 18:52:40

+0

不,不刪除,只是搜索數組,並找出每個值的總量。 – Jim 2011-04-19 18:55:35

+0

這是某種功課嗎? - ) – Mic 2011-04-19 19:19:36

回答

0

試試這個:

var array = ['1','2','3', '3','4','5', '3', '4', '5', '5'], 
l = array.length, 
col = {}, 
current, 
max = {cnt:0, values:[]}; 
while(l--){ 
    current = array[l]; 
    col[current] = (col[current] || 0) + 1; 
    if(col[current] > max.cnt){ 
    max = {cnt:col[current], values: [current]}; 
    }else if(col[current] === max.cnt){ 
    max.values.push(current); 
    } 
} 
console.log(
    max.cnt === 1 ? 
    'they are all different' : 
    max.values.join(',') + ' occured ' + max.cnt + ' times' 
); 
+0

謝謝!這種方法似乎工作得最好。如果兩個值等於兩個不同的變量,是否有辦法將這兩個值分開? – Jim 2011-04-19 20:05:41

+0

'max.values [0]',...'max.values [n]'不好? – Mic 2011-04-19 20:20:44

1
function findMostFrequent(array) { 
    // { 
    // "valueInTheArray": numberOfOccurances, 
    // ... 
    // } 
    var data = {}; 
    // for each value in the array increment the number of 
    // occurences for that value. the or clause defaults it to 0. 
    $.each(array, function(i, val) { 
     data[val] = data[val]++ || 1; 
    }); 
    var answer = null; 
    // for each value if the occurances is higher then to the counter. 
    // then set that as the counter. 
    $.each(data, function(key, val) { 
     if (val > data[answer]) answer = key; 
    } 
    return answer; 
} 

您需要兩個循環。一個來計算每個值的發生次數。並找到哪一個發生最多。

(可選)如果要處理多個高值,則用此替換第二個循環。

var answer = [null]; 
// for each value if the occurances is equal then add it to the array 
// else if the occurance is higher then the current highest occurance. 
// then set that as the current array of values. 
$.each(data, function(key, val) { 
    if (val === data[answer[0]]) { 
      answer.push(key); 
    } else if (val > data[answer[0]]) { 
      answer = [key]; 
    } 
} 
return answer; 
+0

@GaryGreen數據是一個「對象」而不是「數組」。 – Raynos 2011-04-19 19:07:31

+0

哦哎呀! ;-) – 2011-04-19 19:11:07

+0

謝謝,這一個工作得很好,另一個似乎表現更好。我感謝大家對此的反饋! – Jim 2011-04-19 20:11:19

0

你可能想使用這樣的:現在

var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4]; 
var counts = {}; 

for(var i = 0; i< arr.length; i++) { 
    var num = arr[i]; 
    counts[num] = counts[num] ? counts[num]+1 : 1; 
} 

,你必須具有陣列中的所有成員的計數的對象。

console.log(counts[5]); // logs '3' 
相關問題