Javascript频率计数器算法

Javascript频率计数器算法,javascript,algorithm,counter,frequency,Javascript,Algorithm,Counter,Frequency,我不明白这个语法是什么意思 frequencyccounter1[val]=(frequencyccounter1[val]| | 0)+1 你能帮我解释一下这个意思吗 这是一种使用以前设置的值的方法,或者,如果该值为假(因为从未设置过,或者该值为0),则使用0 在此特定示例中,在for循环的第一次迭代中,frequencyccounter1[val]将是未定义的,这是错误的,因此(frequencyccounter1[val]| 0)将返回0 它将结果(1)分配给frequencyCounte

我不明白这个语法是什么意思
frequencyccounter1[val]=(frequencyccounter1[val]| | 0)+1


你能帮我解释一下这个意思吗

这是一种使用以前设置的值的方法,或者,如果该值为假(因为从未设置过,或者该值为0),则使用0

在此特定示例中,在for循环的第一次迭代中,
frequencyccounter1[val]
将是
未定义的
,这是错误的,因此
(frequencyccounter1[val]| 0)
将返回0

它将结果(1)分配给frequencyCounter1[val],在下一次迭代中,
frequencyCounter1[val]
的值为1,这是真实的,因此它加1+1,以此类推

一个明确的例子:

var object={};
对象['foo']=(对象['foo']| | 0)+1;
//对象['foo']未定义,因此从括号中返回0,
//加了1个
//对象['foo']现在是1
对象['foo']=(对象['foo']| | 0)+1;
//对象['foo']是1,因此从括号返回1,
//加了1个
//对象['foo']现在是2
//等等。。。

它被称为“短路评估”。
function solution(first, second){
    var frequencyCounter1 = {};
    var frequencyCounter2 = {};
    for(var val of first){
    frequencyCounter1[val] = (frequencyCounter1[val] || 0) +1
   }
  console.log(frequencyCounter1);
}