2015-10-06 4 views
1

У меня есть форма с несколькими несколькими вариантами ответов на странице и использование serializeArray дает мне массив какзначение счетчика частоты в массиве с JQuery

[ 
    { 
    name: "question1", 
    value: "a" 
    }, 
    { 
    name: "question2", 
    value: "a" 
    }, 
    { 
    name: "question3", 
    value: "b" 
    } 
] 

и так далее (каждый вопрос есть варианты ответа а, b и c).

Как я могу подсчитать частоту каждого ответа (a, b и c) в массиве и иметь счетчики как переменные (a = 2, b = 1 в приведенном выше случае)?

+0

Пожалуйста, покажите, что вы уже пробовали – Popnoodles

ответ

4

Для этого вам не нужен jQuery.

var array = [ 
    { 
    name: "question1", 
    value: "a" 
    }, 
    { 
    name: "question2", 
    value: "a" 
    }, 
    { 
    name: "question3", 
    value: "b" 
    } 
] 

var counts = {}; 

array.forEach(function(element) { 
    if (!counts[element.value]) { 
     counts[element.value] = 0; 
    } 

    counts[element.value] += 1; 
}); 

console.log(counts); 

// Output : 
// {"a" : 2, "b" : 1} 
0

Нечто подобное:

var countArray = {} 

$.each(dataArray, function(index, value){ 
    if(countArray[value.value] == undefined) 
     countArray[value.value] = 0; 

    countArray[value.value]++; 
}); 
0

Попробуйте это: Вы можете перебирать массив ответов и сохранить количество в отдельной карте, где значение ответа является ключевым. Смотрите ниже код -

var answerArray = [ 
 
    { 
 
    name: "question1", 
 
    value: "a" 
 
    }, 
 
    { 
 
    name: "question2", 
 
    value: "a" 
 
    }, 
 
    { 
 
    name: "question3", 
 
    value: "b" 
 
    } 
 
]; 
 

 
var countMap = {}; 
 
$.each(answerArray, function(k, v){ 
 
    countMap[v.value] = (countMap[v.value])? (parseInt(countMap[v.value])) + 1 : 1; 
 
}); 
 

 
alert(JSON.stringify(countMap));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

0

прост:

var answers = [ 
    { 
    name: "question1", 
    value: "a" 
    }, 
    { 
    name: "question2", 
    value: "a" 
    }, 
    { 
    name: "question3", 
    value: "b" 
    } 
] 
var histogram = {}; 

for (var n = 0; n <answers.length; n++) 
{ 
    if (!histogram[answers[n].value]) 
     histogram[answers[n].value] = 1; 
    else 
     histogram[answers[n].value] ++; 
} 

должны дать:

{ 
    "a": 2, 
    "b": 1, 
} 
0

Компактное решение JQuery:

var count = {a: 0, b: 0, c: 0}; 

$(array).map(function(){ 
    count[this.value]++; 
}); 

Что дает вам в конце концов:

{a: 2, b: 1, c: 0} 
Смежные вопросы