Como dice el título, tengo una función de JavaScript que no siempre funciona y no sé por qué.
JS:
function weapon() { var players = document.getElementById("playersList").value.split(",") var rand2 var newPlayers = "" var num = players.length - 1 for (var i = 0; i < num; i++) { rand2 = Math.floor(Math.random() * num) newPlayers += (players[rand2].trim() + ",") if (i != num) { newPlayers += "\n" } players.splice(rand2, 1) } newPlayers += players[0] document.getElementById("playersList").value = newPlayers }HTML:
<textarea id="playersList"></textarea> <button onclick="weapon()">RANDOMIZE</button>En realidad, hay más código en la función, pero esa parte funciona siempre.
Parece que el código puede fallar intermitentemente en esta línea:
newPlayers += (players[rand2].trim() + ",") Al final de su bucle for , llama:
players.splice(rand2, 1) donde splice muta el estado de los players y reduce la cantidad de elementos en la matriz en 1.
Cuando se llama a la siguiente iteración del ciclo, rand2 tiene la posibilidad de generar un valor mayor que la cantidad de elementos en la matriz de players . Entonces recibirá un error si intenta acceder a una posición de índice que no existe.