files/en-us/web/api/xrinputsourcearray/foreach/index.md
{{APIRef("WebXR Device API")}}{{SeeCompatTable}}
The {{domxref("XRInputSourceArray")}}
method forEach() executes the specified callback once for
each input source in the array, starting at index 0 and progressing until the end of the
list.
forEach(callback)
forEach(callback, thisArg)
callback
xrInputSourceArray. The callback accepts up to three parameters:
currentValue
xrInputSourceArray which is currently being processed.currentIndex {{Optional_Inline}}
currentValue is located. If you don't need to know the index
number, you can omit this.sourceList {{Optional_Inline}}
thisArg {{Optional_Inline}}
this
while executing the callback. Note that if you use arrow function notation (=>) to provide the callback, you can
omit thisArg, since all arrow functions lexically bind this.Undefined.
This example snippet gets the list of inputs for a session and tries to handle each type of input device it supports using.
let inputSources = xrSession.inputSources;
inputSources.forEach((input) => {
if (input.gamepad) {
checkGamepad(input.gamepad);
} else if (
input.targetRayMode === "tracked-pointer" &&
input.handedness === player.handedness
) {
/* Handle main hand controller */
handleMainHandInput(input);
} else {
/* Handle other inputs */
}
});
For each input in the list, the callback dispatches gamepad inputs to
a checkGamepad() with the input's {{domxref("Gamepad")}} object, taken from
its {{domxref("XRInputSource.gamepad", "gamepad")}} property, as an input
For other devices, we look for tracked-pointer devices in the player's
main hand, dispatching those to a handleMainHandInput() method.
{{Specifications}}
{{Compat}}
Array method forEach()