Это работает для вас?
for(var v in store) {
numberWeAreLookingAt = store[v];
// we hadn't gone through this number yet, so it's not defined
// as a property in the object "frequency"
if(frequency[numberWeAreLookingAt] === undefined)
frequency[numberWeAreLookingAt] = 0; // let's initialize that property with the
// number zero, in it we will hold the
// number of times it appeared
// Sum 1 to the times it appeared already (or zero if we
// initialized it on the "if" above)
frequency[numberWeAreLookingAt] = frequency[numberWeAreLookingAt] + 1;
// the times this number appeared is more than "max"?
if(frequency[numberWeAreLookingAt] > max) {
// then now "max" is the times this number appeared
max = frequency[numberWeAreLookingAt];
// and the result is this number
result = numberWeAreLookingAt;
}
}
Обратите внимание, что код в ваш вопрос совершенно читаемым. Если вы действительно не можете его прочитать, вы не можете «обвинить его в программисте»: вы просто не очень хорошо разбираетесь в коде и должны работать над этим.
«Создание кода читаемый» не означает, что делает его многословным ... это означает «сделать это очевидным на первом прочтении тому, кто знает синтаксис», и я думаю, что код в ваш вопрос соответствует этому должным образом. Мой код очень многословным и мои комментарии должны быть ненужной: они просто объясняю, что следующая строка кода делает
Единственная строка кода, который «может» нужно поясне-:
frequency[store[v]]=(frequency[store[v]] || 0)+1;
И вы можете см. его разложение выше ... x = (x || 0)+1
означает get x if it's defined, or 0 if it's not: then add 1 and assign back to x
, что я и сделал в подробной форме в своем коде.
Другая вещь, которая, кажется, путает ОП (как отмечено в комментариях), использует синтаксис скобок для доступа к свойствам объекта. Это не редкость в динамически исполняемых языках (и я бы утверждал, что, принимая, как прототипы объектов выполняются в javascript, синтаксис скобок имеет больше смысла, чем синтаксис точки, но это просто оппонент).
В Javascript вы можете получить доступ к свойствам объекта с помощью двух разных синтаксисов: object.property
эквивалентен object[property]
. Основное различие заключается в том, что при использовании синтаксиса скобок вы можете использовать выражение для оценки имени свойства (или использовать другие переменные, как мы здесь делаем). Например, в C# вы можете сделать то же самое, используя dynamic
и ExpandoObject
.
Обратите внимание, что хотя это может вас смутить, на самом деле это не так важно для вопроса ... вы могли бы также подумать о том, что frequency
является массивом, где индекторы являются объектами, а не последовательным числом, и это будет работать то же (в PHP, например, вы можете добиться этого с помощью массивов с ключами или Dictionary
в C#, и это очень типичный шаблон в функциональных языках).
[JavaScript | MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript) имеет все, что вам нужно, и 'frequency' не является [array] (https://developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/Array) это [объект] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) – Andreas
* " Мне нужно всестороннее разбиение всего »* - звучит как босс. Нехорошо. –
Частотная переменная - это объект, который в некоторых языках называется ассоциативным массивом. Возможно, это будет ваша смута. Частотный объект используется в качестве гистограммы – paulski