为什么我对游戏手柄时间戳的列表缩减会导致 NaN?
Why does my list reduction over gamepad timestamps result in NaN?
我在JavaScript中有一个简单的缩减:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
当没有手柄时,结果为1
。
当有一个游戏手柄时,结果是NaN
。
但是,该列表有 number
个值:
navigator.getGamepads().map(x => x.timestamp)
Array [ 280868.92 ]
navigator.getGamepads().map(x => typeof x.timestamp)
Array [ "number" ]
这是为什么?
我正在使用 Firefox 54.0 64 位
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
中的 Reduce 函数获取 1 作为第一次迭代的第一个参数。 timestamp
属性 of 1 是 undefined
,这就是你得到 NaN 的原因。
您可以尝试这样的操作:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, {timestamp: 1})
当没有游戏手柄时,结果为1。因为你的初始值为1。这是你的reduce函数的第二个参数:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
- 第一个参数:
(i, j) => i.timestamp * j.timestamp
- 第二个参数:1
当有一个游戏手柄时,你将你的功能应用到myGamepad,并且1
(1, myGamepad) => 1.timestamp * myGamepad.timestamp
myGamepad 有一个时间戳,但你的初始值有 none,所以它 returns 一个 NaN
也许你可以像这样创建一个初始值
let initValue = {timestamp: 1}
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, initValue )
我在JavaScript中有一个简单的缩减:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
当没有手柄时,结果为1
。
当有一个游戏手柄时,结果是NaN
。
但是,该列表有 number
个值:
navigator.getGamepads().map(x => x.timestamp)
Array [ 280868.92 ]
navigator.getGamepads().map(x => typeof x.timestamp)
Array [ "number" ]
这是为什么?
我正在使用 Firefox 54.0 64 位
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
中的 Reduce 函数获取 1 作为第一次迭代的第一个参数。 timestamp
属性 of 1 是 undefined
,这就是你得到 NaN 的原因。
您可以尝试这样的操作:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, {timestamp: 1})
当没有游戏手柄时,结果为1。因为你的初始值为1。这是你的reduce函数的第二个参数:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
- 第一个参数:
(i, j) => i.timestamp * j.timestamp
- 第二个参数:1
当有一个游戏手柄时,你将你的功能应用到myGamepad,并且1
(1, myGamepad) => 1.timestamp * myGamepad.timestamp
myGamepad 有一个时间戳,但你的初始值有 none,所以它 returns 一个 NaN
也许你可以像这样创建一个初始值
let initValue = {timestamp: 1}
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, initValue )