计算JavaScript中TypedArray中的元素数
下面的代码是取自《面向Web开发人员的专业JavaScript》一书的代码的修改版本。计算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
//第一个参数是应返回的数组类型
//其余的参数是所有应该连接的类型化数组
函数元素(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))
常数结果=