Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算JavaScript中TypedArray中的元素数_Javascript_Arrays - Fatal编程技术网

计算JavaScript中TypedArray中的元素数

计算JavaScript中TypedArray中的元素数,javascript,arrays,Javascript,Arrays,下面的代码是取自《面向Web开发人员的专业JavaScript》一书的代码的修改版本。 //第一个参数是应返回的数组类型 //其余的参数是所有应该连接的类型化数组 函数元素(typedArrayConstructor,…typedArrays){ //计算所有数组中的元素总数 返回类型Darrays.reduce((x,y)=>(x.length | | x)+y.length); } log(numElements(Int32Array,Int8Array.of(1,2,3),Int16Arr

下面的代码是取自《面向Web开发人员的专业JavaScript》一书的代码的修改版本。
//第一个参数是应返回的数组类型
//其余的参数是所有应该连接的类型化数组
函数元素(typedArrayConstructor,…typedArrays){
//计算所有数组中的元素总数
返回类型Darrays.reduce((x,y)=>(x.length | | x)+y.length);
}
log(numElements(Int32Array,Int8Array.of(1,2,3),Int16Array.of(4,5,6),Float32Array.of(7,8,9))当仅使用一个参数调用
.reduce()
时,第一次迭代使用元素0作为第一个回调参数,元素1作为第二个回调参数

在您的例子中,这意味着在第一次迭代中,
x
将是一个数组(请注意,
y
始终是一个数组)。因此,这个小表达式利用以下事实来区分第一次迭代和后续迭代:

someNumber.length
总是
未定义
。(正如在另一个答案中正确指出的,重要的是要记住,
(未定义的| | x)
将始终是
x
,无论其值是什么。)因此,在后续迭代中,
x
是数组长度的运行总数

.reduce()
可以按如下方式编写:

return typedArrays.reduce((x,y) => x + y.length, 0);
通过将第二个参数(0)传递给
.reduce()
,第一次回调调用将与其他回调调用相同,
x
将始终是一个数字。

当仅使用一个参数调用
.reduce()
时,第一次迭代使用元素0作为第一个回调参数,元素1作为第二个回调参数

在您的例子中,这意味着在第一次迭代中,
x
将是一个数组(请注意,
y
始终是一个数组)。因此,这个小表达式利用以下事实来区分第一次迭代和后续迭代:

someNumber.length
总是
未定义
。(正如在另一个答案中正确指出的,重要的是要记住,
(未定义的| | x)
将始终是
x
,无论其值是什么。)因此,在后续迭代中,
x
是数组长度的运行总数

.reduce()
可以按如下方式编写:

return typedArrays.reduce((x,y) => x + y.length, 0);

通过将第二个参数(0)传递给
.reduce()
,第一次回调调用将与其他回调调用相同,
x
将始终是一个数字。

如果x有任何元素且x存在,则使用总和中的长度。否则,如果未定义长度,则返回当前元素x

示例1:-发生在reduce循环的第一次迭代中

x是数组[1,2,3]

     x.length || x -> returns the length of array or current total 

     // summation of code would do the following 
     firsthArrayLength  + secondArrayLength = newTotal
示例2:-发生在reduce循环的其余迭代中

x是整数5

    x.length || x -> returns x since length of integer is undefined

    // summation of code would do the following 
    currentTotal + curLength = newTotal

注意:请记住,在本例中,如果任何数组为null或未定义,那么它将抛出,因为我们无法访问undefined或null的属性length

如果x有任何元素且x存在,则使用总和中的长度。否则,如果未定义长度,则返回当前元素x

示例1:-发生在reduce循环的第一次迭代中

x是数组[1,2,3]

     x.length || x -> returns the length of array or current total 

     // summation of code would do the following 
     firsthArrayLength  + secondArrayLength = newTotal
示例2:-发生在reduce循环的其余迭代中

x是整数5

    x.length || x -> returns x since length of integer is undefined

    // summation of code would do the following 
    currentTotal + curLength = newTotal

注意:请记住,在本例中,如果任何数组为null或未定义,那么它将抛出,因为我们无法访问未定义或null的属性长度

JavaScript中的
|
不仅仅是一个逻辑OR操作,它处理的是“truthy/false”值,而不仅仅是布尔值

未定义
是错误的。当
|
的第一个操作数为false时,对第二个操作数求值,并成为表达式的结果。因此
未定义的| | 0
等于0


在示例代码中,这意味着当
x
为0时,添加0,并获得正确的数值结果。如果您尝试将未定义的
添加到另一个数字,则所有的计算都会在该数字之后变成NaN。

对Pointy的答案进行更多解释:

JavaScript中的
|
不仅仅是一个逻辑OR操作,它处理的是“truthy/false”值,而不仅仅是布尔值

未定义
是错误的。当
|
的第一个操作数为false时,对第二个操作数求值,并成为表达式的结果。因此
未定义的| | 0
等于0


在示例代码中,这意味着当
x
为0时,添加0,并获得正确的数值结果。如果您试图将未定义的添加到另一个数字中,那么您所有的计算都会在这之后变成NaN。

非常令人伤心,这是从一本书中获得的。像那样使用
reduce
|
是鲁莽和不专业的-

//第一个参数是应返回的数组类型
//其余的参数是所有应该连接的类型化数组
常量元素=(构造函数,…arrs)=>
新构造函数(arrs.reduce((r,a)=>r+a.length,0))
常数结果=
婚礼
(INT324)阵列
,Int8Array.of(1,2,3)
,Int16Array.of(4,5,6)
,Float32Array.of(7,8,9)
)
console.log(result.constructor)
console.log(结果)
//INT32阵列

//{0,0,0,0,0,0,0,0,0,0}
如此悲伤以至于取自一本书。像那样使用
reduce
|
是鲁莽和不专业的-

//第一个参数是应返回的数组类型
//其余的参数是所有应该连接的类型化数组
常量元素=(构造函数,…arrs)=>
新构造函数(arrs.reduce((r,a)=>r+a.length,0))
常数结果=