js統計陣列中出現次數最多的元素
阿新 • • 發佈:2018-12-10
想來想去沒想出更好的解決方法。 思路就是在ana函式裡先遍歷一遍arr,維護一個數組newArr 用於將所有數值相同的放在陣列中的同一個塊內。另外一個數組unique 用於維護數值唯一,判斷當前的item是否已存在於newArr中。為了方便比較物件的數值相同,將所有item均轉為string型別來比較。 得到的
newArr = [[3],[2],[{a:1},{a:1}],[1]]
unique = [3,2,{a:1},1]
再通過re函式遍歷newArr並提取出length最大的項及數值(們)。
let arr = [3, 2, {a: 1}, 1, {a: 1}, 1];
function ana(arr) {
let newArr = [];
let unique = [];
for (let i of arr) {
//如果已有數值相同的元素存在
i = JSON.stringify(i);
if (unique.includes(i)) {
newArr[unique.indexOf(i)].push(i)
} else {
let arr = [];
arr.push(i);
unique.push(i);
newArr.push(arr)
}
}
return re(newArr)
}
function re(arr) {
let maxCount = 0;
let thisChar = [];
for (let i of arr) {
if (i.length >= maxCount) {
maxCount = i.length;
}
}
for (let i of arr) {
if (i.length === maxCount) {
thisChar.push(JSON.parse(i[0]));
}
}
return {maxCount, thisChar}
}
console.log(ana(arr)); //{ maxCount: 2, thisChar: [ { a: 1 }, 1 ] }
歡迎補充。