传统写法:n^2 +n
var arr = [1, '1', 2, 2, '1', 1, 1];
var len = arr.length;
var result = [];
var max = 0;
var curIndex = 0;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len; j++) {
if (arr[i] === arr[j]) {
if (!result[i]) {
result[i] = 0;
}
result[i]++;
}
}
}
for (var i = 0; i < len - 1; i++) {
if (result[i] > result[i + 1]) {
curIndex = i;
max = result[i];
}
}
console.log(arr[curIndex], max);
更快速的方式:3n
var arr = [1, '1', 2, 2, '1', 1, 1];
var len = arr.length;
var resultObj = {};
var tempArr = [];
var max = 0;
var curKey = '';
for (var i = 0; i < len; i++) {
var temp;
if (typeof arr[i] == 'string') {
temp = 'str' + arr[i];
} else {
temp = arr[i];
}
tempArr.push(temp);
}
for (var i = 0; i < len; i++) {
var key = tempArr[i] + '';
if (!resultObj.hasOwnProperty(key)) {
resultObj[key] = 0;
}
resultObj[key]++;
}
console.log(tempArr, resultObj);
for (var key in resultObj) {
if (resultObj[key] > max) {
max = resultObj[key];
curKey = key;
}
}
var result = curKey.includes('str') ? curKey.substr(3) : curKey;
console.log(result, max);
最快的写法:n
console.time();
function typeObject(str) {
return Object.prototype.toString.call(str).slice(8, -1)
}
var arr = [1, '1', 2, 2, '1', 1, 1];
function maxStr(arr) {
let object = {}, count = 0, str;
for (let i = 0; i < arr.length; i++) {
if (typeObject(arr[i]) === 'Number') arr[i] = arr[i] + 'str'
if (object[arr[i]] !== undefined) {
object[arr[i]] = object[arr[i]] + 1
count = Math.max(count, object[arr[i]])
if (object[arr[i]] === count) {
if ((/str/g).test(arr[i])) arr[i] = +arr[i].replace('str', '')
str = arr[i]
}
} else {
object[arr[i]] = 1
}
}
return {
str,
count
}
}
var result = maxStr(arr);
console.log(result)
console.timeEnd();