使用jQuery计算数组中的值频率

Count value frequencies in an array with jQuery

本文关键字:频率 数组 jQuery 计算 使用      更新时间:2023-09-26

我有一个表单,在一个页面上有几个选择题,使用serializeArray给我一个数组,如

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

依次类推(每个问题都有答案选项a、b和c)。

我如何计算数组中每个答案(a, b和c)的频率,并将计数作为变量(a = 2, b = 1)?

根本不需要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}

像这样:

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

试试这个:您可以迭代答案数组并将计数保存在单独的映射中,其中答案值是键。参见下面的代码-

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>

simple:

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,
}

紧凑的jQuery解决方案:

var count = {a: 0, b: 0, c: 0};
$(array).map(function(){
    count[this.value]++;
});

结果是:

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