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