Javascript 将一些JS转换为C

Javascript 将一些JS转换为C,javascript,c#,Javascript,C#,我不想把一些代码从JS翻译成C,但真的无法想象其中的一部分 function getHisto(pixels) { var histosize = 1 << (3 * sigbits), histo = new Array(histosize), index, rval, gval, bval; pixels.forEach(function(pixel) { rval = pix

我不想把一些代码从JS翻译成C,但真的无法想象其中的一部分

function getHisto(pixels) {
        var histosize = 1 << (3 * sigbits),
            histo = new Array(histosize),
            index, rval, gval, bval;
        pixels.forEach(function(pixel) {
            rval = pixel[0] >> rshift;
            gval = pixel[1] >> rshift;
            bval = pixel[2] >> rshift;
            index = getColorIndex(rval, gval, bval);
            histo[index] = (histo[index] || 0) + 1;
        });
        return histo;
    }
如果你需要任何额外的信息,我会尽力提供

编辑1:我特别指的是histo[index]|| 0

行histo[index]=histo[index]| 0+1

正在添加到数组中,并通过当前索引+1或0+1确定将其放置在何处

基本上,or | |处理它作为第一个添加到histo中的边缘情况。

该行

histo[index] = (histo[index] || 0) + 1;
是实现这一目标的捷径:

if (!histo[index]) { 
    histo[index] = 0; 
}
histo[index] = histo[index] + 1;
这对你来说可能更有意义


请参见

方括号表示法与C中的表示法相同,它是按索引进行数组访问

看一看

比如说。如果您有一个包含两项的数组:

// javascript
var x = ["a", "b"];

// C#
var y = string[] {"a", "b"};
第一项位于索引0,第二项位于索引1。然后,您可以使用方括号符号访问每个项目:

var first = x[0];
var second = x[1];
||是一个

在C中替换这个的等价物是a

基本上在C语言中,你的行应该是这样的

histo[index] = (histo[index] ?? 0) + 1;

什么使你困惑?历史[索引]| | 0部分?这只是意味着,如果histo[index]未定义,请使用零。对不起,我忘了指定使我困惑的内容。
histo[index] = (histo[index] ?? 0) + 1;