我试图从数组中删除一个随机项,直到数组为空,使用jquery或javascript。每次随机项都需要控制台。 基本上我将使用给定数组中的随机图像创建一个元素,直到所有图像都已创建。
这是我尝试获取随机项并从数组中删除但是它没有通过整个数组 - 我很难过。
uniq
这是我的控制台输出:
Console.Write("Please Input The student First name/To cancel enter END> ");
StFName[count] = Console.ReadLine();
do
{
Console.Write("Please Input The student First name/To cancel enter END> ");
StFName[count] = Console.ReadLine();
} while (!Regex.IsMatch(StfName[count], "[[:alpha:]]"));
答案 0 :(得分:16)
函数Array.prototype.pop()
将删除最后一个元素。因此,在这种情况下,您必须使用Array.prototype.splice(indext,cnt)
,
for(var i = array.length-1;i>=0;i--){
array.splice(Math.floor(Math.random()*array.length), 1);
console.log(array);
}
由于我们正在改变数组,我们必须以相反的方式遍历它,这样索引就不会崩溃。
答案 1 :(得分:5)
当长度大于零时,只需做一个随机索引和拼接。
.*

答案 2 :(得分:2)
Array.prototype.pop删除数组中的最后一个元素,而不是特定元素。要删除特定索引处的元素,您可以使用Array.prototype.splice(请参阅:How do I remove a particular element from an array in JavaScript?)。
for(var i = 0;i<array.length;i++)
也遇到问题,因为每当您删除项目时array.length
都会更改,您只能通过一半数组,您可以反向循环for ( var i = array.length; i--; )
,这样array.length
只在第一次迭代之前评估一次,或者你可以使用while循环while( array.length )
。
将您的循环更改为:
while( array.length ) {
var index = Math.floor( Math.random()*array.length );
console.log( array[index] ); // Log the item
array.splice( index, 1 ); // Remove the item from the array
}