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