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}