从A数组移动到B数组而没有未定义

时间:2016-12-02 11:28:08

标签: javascript arrays undefined

我的问题如下。我有两个数组,我想将一个元素从数组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数组中有三个元素。如果随机数是“未定义”,我希望我的函数自动重启。因此,对于下一个随机滚动,它会选择另一个元素。等等。 我在代码中的想法,但它没有工作,因为它仍在下降“未定义”的。 谢谢,

3 个答案:

答案 0 :(得分:1)

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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

因此,您可以将"undefined"替换为undefined,例如取代

yourVar !== "undefined"

通过

yourVar !== undefined

即使我不建议任何意思,只要有人不创建名为undefined的变量,它就会起作用。另外,鉴于您正在测试变量的存在,正如其他人所说,正确的测试方法是通过执行

typeof yourVar !== 'undefined'

有关详细信息,请参阅How to check a not-defined variable in JavaScript

更新 然后,为了防止您的函数进入无限循环,您应该检查您的数组是否只包含空元素。

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

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

然后你应该通过move()的非无效来调节array1的递归调用。通过替换

else {move();return}   

通过

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

答案 2 :(得分:0)

你的条件array1 [x]!==&#34; undefined&#34;是错的。它将检查array1 [x]中的字符串&#34; undefined&#34;

您需要使用类似

的内容
typeof(array1[x]) !== 'undefined'