2012-07-09 4 views
0

Как получить элементы массива и количество повторений (повторений)?Как подсчитать количество повторений переменных в массиве javascript?

настоящее время у меня этот скрипт

//COUNT VAL 
var curr = ''; 
var previous = ''; 
var arr = new Array(); 
var sorted = count.sort(); 
for(var c=0; c < sorted.length; c++){ 
if(sorted[c] != ''){ 
if(sorted[c] != curr){ 
var repeat = 1; 
arr[sorted[c]] = repeat; 
curr = sorted[c]; 
} 
else if(sorted[c] == curr){ 
repeat++; 
} 
} 
} 
alert(JSON.stringify(arr)); 

Значения массива "подсчет" являются (я использовал JSON.stringify):

[" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null] 

Что я ожидаю мой скрипт для отображения ... (Im ожидая его возвращать массив)

[1: 10, 2: 3] 

(х: у) х число, у есть число раз это повторить.

Что я получаю ...

[null,1,1] 
+0

Ваших ожидаемые результаты выглядят как литерал объект, но заключенные в квадратных скобках, что делает его похожим на массив. – Jamiec

+0

Извините, если это смущает. Я пытаюсь получить массив из него. – JohnSmith

ответ

1

Это даст вам сводку, игнорируя пустые значения

var collection = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var summary = collection.reduce(function(a, b) { 
    var tmp = parseInt(b) 
    if (!isNaN(tmp)) { 
     if (!a[tmp]) { 
      a[tmp] = 0; 
     } 
     a[tmp]++; 
    } 
    return a; 
}, {}); 

console.log(summary); 
+0

Благодарим вас за ответ и за удаление нулевых значений! – JohnSmith

2
var a = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var counts = a.reduce(function(obj, cur){ 
    if(!obj[cur]) { 
     obj[cur] = 0; 
    } 
    obj[cur]++; 
    return obj; 
}, {}); 

Результат

2: 3 
1: 10 
null: 13 
1

Используя код,

Измените цикл, как это,

for(var c=0; c < sorted.length; c++){ 
if(sorted[c] != ''){ 
    if(arr[sorted[c]]){ 
     var count = arr[sorted[c]]; 
     count++; 
     arr[sorted[c]] = count; 
    } 
    else{ 
     arr[sorted[c]] = 1; 
    } 
} 
} 
0

Не уверен, что если его лучшее решение, но это работает, и сохранить вывод в массив.

var arr = [" 2"," 2"," 2","1","1","1","1","1","1","1","1","1","1",null,null,null,null,null,null,null,null,null,null,null,null,null]; 

var obj = {}; 
var final = []; 
var count = 0; 
for(var i=0,len=arr.length;i<len;i++){ 
    if(arr[i] in obj){ 
    final[obj[arr[i]]] ++; 
    } 
    else{ 
    obj[arr[i]] = count; 
    final[count] = 1; 
    count++; 
    } 
} 

console.log(final); 
0

Попробуйте это:

var repeated = function repeated(arr){ 
       var res = {}; 
       for(index in arr){ 
        var x = arr[index]; 
        if(!res.hasOwnProperty(x)) 
         res[x] = 0;  
        res[x]++; 
       } 
       return res; 
      } 
Смежные вопросы