想来想去没想出更好的解决方法。
思路就是在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 ] }
欢迎补充。