javascript - 数组移除、“未定义”和 JavaScript
问题描述
首先对不起我的英语。我正在制作一个小程序,将足球运动员分成两支球队,A 和 B。6 名球员,3 名 A 和 3 名 B。当然还有一个随机数生成器。
在 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 equipo 2 (4) [“梅西”, “罗纳尔迪尼奥”, “马拉多纳”, “贝利”]”
我用来净化的控制台日志也似乎工作正常......该数组每个 cicle 短 1 个元素,并且 array.lenght 匹配所需的大小。
做错了什么?
解决方案
问题就出在这条线上:
Math.round(Math.random() * largoArray)
因为这有时会返回一个超出数组边界的索引。发生这种情况时,此代码:
eq1.push(jugadores[rand]);
remove(jugadores,jugadores[rand]);
不起作用,因为jugadores[rand]
is undefined
,所以你最终推undefined
入你的阵列之一,而不从原始jugadores
阵列中删除任何东西。
要解决此问题,请改用该Math.floor
函数,将行更改为:
Math.floor(Math.random() * largoArray)
推荐阅读
- javascript - 单击#links(相同页面链接)时如何隐藏菜单?
- java - 如何确保我的微调器(菜单内)更新我的菜单标题并确保标题完整显示?
- python - py 到 exe:RecursionError:调用 Python 对象时超出最大递归深度
- web - Dialogflow Web 演示聊天机器人中的集成按钮
- javascript - 呈现唯一键
- javascript - 无法将从 firebase 获取的数据显示到 reactjs webapp
- python - 有没有办法将 python 类转换为字节?
- r - ggplot2:移动(重新定位)图例以免阻塞图形框
- c# - Azure 函数中的 OutOfMemoryException
- mysql - Laravel Eloquent:计算两个表中的数据