Pochodzę z przyszłości, gdzie pytanie to zostało ponownie zadane, ale zacząłem zbyt wcześnie z rozwiązaniem i zostało oznaczone jako odpowiedź. W każdym razie jest to uzupełnienie odpowiedzi SLaks.
function nthMostCommon(string, ammount) {
var wordsArray = string.split(/\s/);
var wordOccurrences = {}
for (var i = 0; i < wordsArray.length; i++) {
wordOccurrences['_'+wordsArray[i]] = (wordOccurrences['_'+wordsArray[i]] || 0) + 1;
}
var result = Object.keys(wordOccurrences).reduce(function(acc, currentKey) {
/* you may want to include a binary search here */
for (var i = 0; i < ammount; i++) {
if (!acc[i]) {
acc[i] = { word: currentKey.slice(1, currentKey.length), occurences: wordOccurrences[currentKey] };
break;
} else if (acc[i].occurences < wordOccurrences[currentKey]) {
acc.splice(i, 0, { word: currentKey.slice(1, currentKey.length), occurences: wordOccurrences[currentKey] });
if (acc.length > ammount)
acc.pop();
break;
}
}
return acc;
}, []);
return result;
}
Po prostu z ciekawości - czy masz gdzieś ten fragment, czy też znalazłeś rozwiązanie tylko dla tej odpowiedzi? Tak czy inaczej, jest niesamowita. :) –
@ajax: Stworzyłem go na miejscu. Dzięki! – SLaks
Hej wielkie dzięki, po prostu się zastanawiałem, czy mógłbyś wyjaśnić/\ b/argument? To jest wyrażenie regularne tak? –