Я написал довольно запутанную реализацию функции Microsoft Excel MODE.MULT, которая возвращает массив наиболее часто встречающихся или повторяющихся значений в массиве. Он реализован с тремя циклами, включая один вложенный в другой, и я подозреваю, что есть более простой способ сделать это. Для информации используется _.uniq от Lo-Dash для извлечения повторяющихся значений из возвращаемого массива.Как я могу улучшить эту реализацию MODE.MULT
function MODEMULT(range) {
var n = range.length;
var max = 0;
var counts = new Array();
var result = new Array();
for (var i = 0; i < n; i++) {
counts[i] = 0;
for (var j = 0; j < n; j++) {
if (range[j] === range [i]) {
counts[i]++;
max = (counts[i] > max) ? counts[i] : max;
}
}
}
for (var k = 0; k < n; k++) {
if (counts[k] === max) {
result.push(range[k]);
}
}
return _.uniq(result);
}
Для целей тестирования, MODEMULT([1,2,3,4,3,2,1,2,3])
должен возвращать [2,3]
Заранее спасибо за вашу помощь!
Awesome! Именно то, что я искал. Большое спасибо за Вашу помощь. Я обновил свой код и дал вам кредит на http://stoic.com/formula –
Спасибо ismael. Стоик отлично выглядит! В течение некоторого времени вы делали Excel -> Javascript-конверсии (автоматически как этап сборки для моих проектов на основе пользовательских инструментов с использованием Apache POI), но не видели подобных проектов, подобных вашим. Поистине замечательная находка! – Roonaan
Спасибо! Рад, что вам это нравится. Мы могли бы использовать некоторую помощь для некоторых более сложных функций, особенно отсутствующих статистических ;-) –