从阵列移动到b数组而没有未定义



people

我的问题是以下内容。我有两个数组,我想将一个元素从数组A移动到数组B。但是,这并不容易。哪个元素将完全基于随机。我复制代码,以便我的目标更容易理解:

var array1 = ["A","B","C"];
var array2 = [];
var move = function() {
var x = Math.floor((Math.random() * 100) + 1);
 if (x > 0 && x < 33.1 && array1[0] !== "undefined")
        {array2.push(array1[0])
         delete array1[0]
         }
  if (x > 33.2 && x < 66.1 && array1[1] !== "undefined")
        {array2.push(array1[1])
         delete array1[1]
         }
  if (x > 66.2 && x < 100.1 && array1[2] !== "undefined")
        {array2.push(array1[2])
         delete array1[2]
         }
  else {
  move();
  return
  }
}
move();
move();
move();
console.log(array1);
console.log(array2);

因此,目的是称为3次的函数,我们将在B数组中具有三个元素。我希望我的功能可以自动重新启动,如果随机数为"未定义"。因此,对于下一个随机滚动,它将选择另一个元素。等等。我在代码中的想法,但它不起作用,因为它仍在删除"未定义"的构想。谢谢,

为什么不使用随机值的Array#splice反映array1的长度。

var array1 = ["A", "B", "C"],
    array2 = [],
    move = function () {
        var x = Math.floor((Math.random() * array1.length));
        array2.push(array1.splice(x, 1)[0]);
    };
move();
move();
move();
console.log(array1);
console.log(array2);

您的条件array1 [x]!=="未定义"是错误的。它将检查array1 [x]的字符串"未定义"

您需要使用

之类的东西
typeof(array1[x]) !== 'undefined'

测试时,例如array1[1] !== "undefined",您不会测试该变量是否未定义,但是如果变量等于一个值为"undefined"的字符串。

因此,您可以用undefined替换"undefined",例如更换

yourVar !== "undefined"

yourVar !== undefined

即使我不建议这样做,因为只要某人不创建名称不定义的变量,它就会起作用。另外,鉴于您正在测试存在变量的存在,就像其他情况一样,进行测试的正确方法是通过执行

typeof yourVar !== 'undefined'

有关更多详细信息,请参阅如何检查JavaScript中的不定定义变量

更新然后,为防止您的功能输入无限循环,您应该检查数组是否仅包含空元素。

首先,您应该定义一个可以检查此功能的函数,如下所示

Array.prototype.isNull = function (){
    return this.join().replace(/,/g,'').length === 0;
};

然后,您应通过array1的非毫无疑问调节move()的递归调用。通过更换

else {move();return}   

else {if (!array1.isNull()){move()};return}

最新更新