人
我的问题如下。我有两个数组,我想将一个元素从数组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数组中有三个元素。如果随机数是“未定义”,我希望我的函数自动重启。因此,对于下一个随机滚动,它会选择另一个元素。等等。 我在代码中的想法,但它没有工作,因为它仍在下降“未定义”的。 谢谢,
答案 0 :(得分:1)
为什么不使用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);
&#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'