I'm doing a beginner exercise, find the mean/median/mode/range of an array of numbers. I'm on the mode now, and found this:
var store = ['1','2','2','3','4'];
var frequency = {}; // array of frequency.
var max = 0; // holds the max frequency.
var result; // holds the max frequency element.
for(var v in store) {
frequency[store[v]]=(frequency[store[v]] || 0)+1; // increment frequency.
if(frequency[store[v]] > max) { // is this frequency > max so far ?
max = frequency[store[v]]; // update max.
result = store[v]; // update result.
}
}
It works but I don't understand it.
- What does the
|| 0
do in the first line? - Why can't I change the key names?
frequency["key"+store[v]]=(frequency[store[v]] || 0)+1;
returns {key1: 1, key2: 1, key3: 1, key4: 1}
not {1: 1, 2: 2, 3: 1, 4: 1}
, so the keys are playing an important role.
- Is the if statement testing both the key and value?
Replacing any instance of frequency[store[v]];
with a variable (var freqTest = frequency[store[v]];
, created inside or outside the loop) breaks something.
The whole thing is going over my head really.