首页 > 解决方案 > 数组移除、“未定义”和 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 匹配所需的大小。

做错了什么?

标签: javascript

解决方案


问题就出在这条线上:

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)

推荐阅读