Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 遍历数组并返回jquery中每个数组的数量_Javascript_Jquery_Arrays_Loops - Fatal编程技术网

Javascript 遍历数组并返回jquery中每个数组的数量

Javascript 遍历数组并返回jquery中每个数组的数量,javascript,jquery,arrays,loops,Javascript,Jquery,Arrays,Loops,所以我有一个数组。数组中的字符串值每次都可以更改: var array = ['1','2','3','4','5']; 或者有时: var array = ['1','4','3','4','4']; 甚至: var array = ['1','3','3','4','4']; 我如何遍历这个数组,找出哪个值最多,然后显示它。另外,我如何让它变得更加智能,以理解有时两个值之间存在关联,就像上面最后一个数组中的情况一样,然后显示信息通知我值“3”和“4”是关联的。。。或者如果没有多次出现的

所以我有一个数组。数组中的字符串值每次都可以更改:

var array = ['1','2','3','4','5'];
或者有时:

var array = ['1','4','3','4','4'];
甚至:

var array = ['1','3','3','4','4'];
我如何遍历这个数组,找出哪个值最多,然后显示它。另外,我如何让它变得更加智能,以理解有时两个值之间存在关联,就像上面最后一个数组中的情况一样,然后显示信息通知我值“3”和“4”是关联的。。。或者如果没有多次出现的值,则显示所有值。想法

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;

您可能希望使用以下内容:

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;
}
试试这个:

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'
);

除了获取发生次数最多的值之外,是否还要从数组中删除重复项?否,不删除,只需搜索数组并找出每个值的总存在量。这是某种家庭作业吗?-)看起来像是CS老师向贫困学生提出的那些令人讨厌的问题:)@GaryGreen数据是一个
对象
而不是
数组
。谢谢,这一个也很有效,另一个似乎表现更好。我感谢大家对此的反馈@吉姆:是的,这个稍微慢一点。不过,手动数组伪造的次数更少。简单地迭代数据。谢谢!这种方法似乎效果最好。如果这两个值等于两个不同的变量,有没有办法将它们分开?
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'
);