Целью цикла while является использование условий выхода. Поскольку условия выхода нет, я, по сути, создал довольно эффективный алгоритм цикла for и просто заменил цикл for на цикл while.
var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];
var occurences = {};
var max = 0;
var champion;
var index = 0;
while (index < arr.length) {
var item = arr[index];
occurences[item] = (occurences[item] || 0) + 1;
if (occurences[item] > max) {
max = occurences[item];
champion = item;
}
index += 1;
}
console.log(`${champion} has ${max} occurences`);
К сожалению, в приведенном выше коде всегда будут учитываться 3
и "3"
как одно и то же значение. Если вы не хотите, чтобы это произошло, вам следует вместо этого использовать карту.
var arr = [3, 'a', 'a', 'a', 2, 3, 'a', 3, 'a', 2, 4, 9, 3];
var occurences = new Map();
var max = 0;
var champion;
var index = 0;
while (index < arr.length) {
var item = arr[index];
var newSize = (occurences.get(item) || 0) + 1;
occurences.set(item, newSize);
if (newSize > max) {
max = newSize;
champion = item;
}
index += 1;
}
console.log(`${champion} has ${max} occurences`);