如何从数组中删除随机项,然后将其从数组中删除,直到数组为空

时间:2016-03-17 19:23:38

标签: javascript jquery arrays for-loop

我试图从数组中删除一个随机项,直到数组为空,使用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:]]"));

3 个答案:

答案 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
}