var arr = [23,23,12,21,45,35,21,23], i = 0, maxI, item = {}; arr.sort(function(x,y){return x - y;}); for(i = 0; maxI = arr.length, i < maxI; i +=1){ var key = arr[i], obj = {}; if(item[key]){ item[key].count++; }else{ obj.value = arr[i]; obj.count = arr[i] == arr[i+1]? 2: 1; item[key] = obj; } if(arr[i] == arr[i+1]){ arr.splice(i+1,1); } } JSON.stringify(item);//"{"12":{"value":12,"count":1},"21":{"value":21,"count":2},"23":{"value":23,"count":3},"35":{"value":35,"count":1},"45":{"value":45,"count":1}}"
数组arr为无序数组
先对数组arr进行排序 Array.prototype.sort
排序后的arr顺序为从小到大,所以如果值是重复的,那一定是相邻的
for循环判断(每次循环重新计算数组arr的长度)
如果item[arr[i]]存在,则执行item[arr[i]].count++;
如果item[arr[i]]不存在,将obj赋值;
obj.value为arr[i];
判断相邻是两个元素值是否相等
如果相等 obj.count设值为2 arr.splice(i+1,1);//从数组arr中删除元素,元素索引位置为i+1,删除个数为1;
如果不相等 obj.count设值为1
item[arr[i]]赋值为obj;
1 var arr = [1, 2, 3, 4, 5, '1', '2', '4', '1', true, true, false, false, true, false, 0, 0, 1], maxRepeatItem; 2 3 4 5 var hash = {};//利用hash 来记录次数 6 var m = 1; //现在的最大次数 7 var trueEl = [];//最大的元素,可能出现不止一个最大元素,所以为数组 8 for (var i = 0, len = arr.length; i < len; i++) { 9 var el = arr[i]; 10 var uniqueEl = typeof (el) + el; // 为了区分 1 和 '1' 11 if (!hash[uniqueEl]) { //利用对象的hash检验是否元素重复 12 hash[uniqueEl] = 1; 13 }else{ 14 hash[uniqueEl]++; 15 } 16 if (hash[uniqueEl] == m ) { 17 trueEl.push(el); //把当前最大次数的元素放到数组里 18 } else if (hash[uniqueEl] > m) { 19 trueEl = []; //清空数组 20 m = hash[uniqueEl]; 21 trueEl.push(el); 22 } 23 } 24 console.log( trueEl);