首先对不起我的英语。 我正在编写一个小程序,将足球运动员分为两队:A 队和 B 队。 6 名玩家,A 3 名,B 3 名。当然还有随机数生成器。
在Java中我没有问题,我编写了这个程序并且运行完美,但是我对JS了解不多,并且数组项删除在这里似乎有点不同。
我的代码:
function hola(){
var primero = document.getElementById("1").value;
var segundo = document.getElementById("2").value;
var tercero = document.getElementById("3").value;
var cuarto = document.getElementById("4").value;
var quinto = document.getElementById("5").value;
var sexto = document.getElementById("6").value;
var jugadores = [primero,segundo,tercero,cuarto,quinto,sexto];
var eq1=[];
var eq2=[];
while (jugadores.length > 0){
var largoArray = jugadores.length;
var rand = Math.round(Math.random()* largoArray);
console.log("before the if, array jugadores haves ",jugadores.toString() ," and his size is ",jugadores.length);
if (eq1.length < 3){
eq1.push(jugadores[rand]);
remove(jugadores,jugadores[rand]);
}else {
eq2.push(jugadores[rand]);
remove(jugadores,jugadores[rand]);
}
}
document.getElementById("resultado").innerHTML= eq1 + " y el equipo B: " + eq2;
console.log("equipo 1 ", eq1);
console.log("equipo 2", eq2);
}
function remove(array, element) {
const index = array.indexOf(element);
if (index !== -1) {
array.splice(index, 1);
}
}
它返回给我:
“equipo 1 (3) [未定义,“伊涅斯塔”,“罗纳尔多”] script2.js:35 equalo 2 (4) [“梅西”、“罗纳尔迪尼奥”、“马拉多纳”、“贝利”]”
我净化的控制台日志似乎工作正常...... 该数组每个 cicle 都短 1 个元素,并且 array.lenght 与所需的大小匹配。
我做错了什么?
最佳答案
问题上线了:
Math.round(Math.random() * largoArray)
因为有时会返回超出数组范围的索引。当发生这种情况时,这段代码:
eq1.push(jugadores[rand]);
remove(jugadores,jugadores[rand]);
不会工作,因为 jugadores[rand]
是 undefined
,所以你最终将 undefined
插入你的数组之一,而不需要从原始 jugadores
数组中删除任何内容。
要解决此问题,请使用 Math.floor
函数,并将该行更改为:
Math.floor(Math.random() * largoArray)
关于javascript - 数组删除、 "undefined"和 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768662/