这段代码的语法是什么?

时间:2016-04-11 05:36:14

标签: javascript arrays frequency brackets

当我找到这个答案时,我正在寻找一种返回数组模式的方法:

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.
    }
}

这段代码完美无瑕,而且我理解得很清楚,我能够输出最常见的值和值出现的次数。但是,这个代码块对我来说毫无意义。特别是这一行:

frequency[store[v]]=(frequency[store[v]] || 0)+1;

我认为频率是一个数组,商店[v]作为索引。这个代码块究竟发生了什么?

1 个答案:

答案 0 :(得分:1)

首先,浏览this tutorial以了解Javascript数组和Javascript对象之间的差异。然后你会读到这样的代码:

var store = ['1','2','2','3','4'];               // store[0] == '1', store[1] = '2', etc.
var frequency = {};  // array of frequency.      // frequency.'1' = undefined

然后,当分配发生时,它更容易理解。 frequency[store[v]]只是frequency.'1' v == 0,意味着您正在访问对象frequency及其字符串1命名的字段。 javascript对象可以具有任何名称的字段,例如frequency.'apple'frequency.'table'等。在您给予价值之前,它们只是未定义。

然后,分配更容易阅读

if (frequency.'1' is undefined)
    store the value [0 + 1] into frequency.'1'
else increment the value by 1