2012-06-05 2 views
2

У меня есть следующие JavaScript массив:подсчитывать Повторные Элементы массива

var President = new Array(); 
President[0]="Thomas Jefferson"; 
President[1]="Thomas Jefferson"; 
President[2]="Thomas Jefferson"; 
President[3]="Thomas Jefferson"; 
President[4]="Thomas Jefferson"; 
President[5]="Thomas Jefferson"; 
President[6]="Thomas Jefferson"; 
President[7]="Thomas Jefferson"; 
President[8]="Thomas Jefferson"; 
President[9]="Thomas Jefferson"; 
President[10]="Thomas Jefferson"; 
President[11]="Thomas Jefferson"; 
President[12]="Thomas Jefferson"; 
President[13]="James Madison"; 
President[14]="James Madison"; 
President[15]="James Madison"; 
President[16]="James Madison"; 
President[17]="James Madison"; 
President[18]="James Madison"; 
President[19]="James Madison"; 
President[20]="Abraham Lincoln"; 
President[21]="Abraham Lincoln"; 
President[22]="Abraham Lincoln"; 
President[23]="Abraham Lincoln"; 
President[24]="Abraham Lincoln"; 
President[25]="George Washington"; 

Как я подсчитайте повторяющиеся элементы, так что выход заключается в следующем:

Thomas Jefferson: 13 
James Madison: 7 
Abraham Lincoln: 5 
George Washington: 1 

Спасибо за вашу помощь !

+0

FYI, при отправке вопроса в текстовом редакторе есть кнопка форматирования кода кода. Кроме того, что вы пробовали до сих пор? –

+1

Возможный дубликат [Подсчет вступлений элементов массива Javascript] (http://stackoverflow.com/questions/5667888/counting-occurences-of-javascript-array-elements) – j08691

ответ

0

Я не разработчик Javascript, но на основе this статьи на хэш-таблице в JS это выглядит, как вы хотели бы что-то вроде следующее:

var h = new Object(); 
for (var p in President) { 
    if (h.hasItem(p)) { 
     h.setItem(p, h.getItem(p) + 1); 
    } 
    else { 
     h.setItem(p, 1); 
    } 
} 

for (var p in h) 
{ 
    document.write(p); 
    document.write(":"); 
    document.write(h.getItem(p)); 
    document.write("<br />"); 
} 
2

@Tyson: Массивы не должны быть пройдены с использованием для .. in.

for (var stats = {}, potus, i = President.length; i--;) { 
    if (!((potus = President[i]) in stats) 
     stats[potus] = 0; // Initialize a new counter 
    stats[potus]++; 
    } 

    // Now stats['Thomas Jefferson'] will be 13 etc. 
Смежные вопросы