我简单地减少了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" ]
这是为什么?
我使用的是64位的Firefox 54.0
答案 0 :(得分:2)
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
中的Reduce函数得到1作为第一次迭代的第一个参数。 timestamp
属性为undefined
,这就是你获得NaN的原因。
您可以尝试这样的事情:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, {timestamp: 1})
答案 1 :(得分:1)
当没有游戏手柄时,结果为1.因为你的初始值是1.这是你的reduce函数的第二个参数:
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
(i, j) => i.timestamp * j.timestamp
当有一个游戏手柄时,你将你的功能应用到myGamepad,1
(1, myGamepad) => 1.timestamp * myGamepad.timestamp
myGamepad有一个时间戳,但你的初始值没有,所以它返回一个NaN
也许你可以像这样创建一个初始值
let initValue = {timestamp: 1}
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, initValue )