2013-11-20 40 views
0

我期待將隨機打印的字符串分組爲兩組。將隨機打印的字符串分成兩組

這裏用到我的JavaScript代碼來隨機字符串:

Array.prototype.shuffle= function(times){ 
    var i,j,t,l=this.length; 
    while(times--){ 
     with(Math){ 
      i=floor(random()*l);j=floor(random()*l); 
     } 
     t=this[i];this[i]=this[j];this[j]=t; 
    } 
    return this; 
} 

var players=["Ben","Caleb","Alex","Ryder","Brad","Garret","Justin","John","Kevin"] 

document.write(players.shuffle(200).join("<BR>")) 

顯然,此時的打印順序是

NAME 
NAME 
NAME 
NAME 
NAME 
NAME 
NAME 
NAME 
NAME 

不過,我想它是

NAME NAME 
NAME NAME 
NAME NAME 
NAME NAME 
NAME 

我該怎麼做呢?

+0

爲什麼你期望它比後1 200個洗牌更隨機的?無論如何,只要洗牌,然後將它們組合在一起。 – RobG

+0

這讓我覺得對我來說更隨意。雖然它可能不是更隨機的,但它不會影響加載速度或任何事情,所以對我來說沒問題。我不知道它在社區中是否被壓抑,但它只是感覺更隨意。無論如何......我一直知道我瘋了。 – user2873801

回答

1
for(var i=1; i<players.length+1; i+=2){ 
    console.log(players[i-1]+" "+((players[i]!=undefined)?players[i]:"")); 
} 

for(var i=0; i<players.length; i+=2){ 
    console.log(players[i]+" "+((players[i+1]!=undefined)?players[i]:"")); 
} 

你可以用這種方式:

Array.prototype.shuffle= function(times){ 
    var i,j,t,l=this.length; 
    while(times--){ 
     with(Math){ 
      i=floor(random()*l);j=floor(random()*l); 
     } 
     t=this[i];this[i]=this[j];this[j]=t; 
    } 
    return this; 
} 

var players=["Ben","Caleb","Alex","Ryder","Brad","Garret","Justin","John","Kevin"] 
players.shuffle(200); 

for(var i=0; i<players.length; i+=2){ 
    document.write(players[i]+" "+((players[i+1]!=undefined)?players[i+1]:"")+"<br>"); 
} 
+0

我很感謝您的回答,但是我很困惑如何將它實現到您的代碼中?你能解釋一下你提供的代碼的位置來使它工作嗎? – user2873801

+0

@ user2873801檢查更新 – mdolbin

+0

再次感謝。 已實施。 編輯:這似乎只是複製的第一個名字,像這樣: NAME1 NAME1 NAME2 NAME2 NAME3 NAME3 NAME4 NAME4 NAME5 – user2873801

0

只是評論:

大大不喜歡,並會在將來被移除版本的ECMAScript。它的使用在這裏完全是無償的,考慮到等價的:

i = Math.random() * l | 0; 
    j = Math.random() * l | 0; 

至於打印出三三兩兩的成員,可以考慮:

// Only increment by 1 in the condition 
for(var i=0, iLen=players.length; i<iLen; i++) { 

    // Second increment is in here 
    console.log(players[i] + " " + (++i in players? players[i] : '')); 
} 

因此,如果有3項(位於索引0,即項目, 1和2)當它測試3 in players它將返回false並且不打印任何內容。

你也可以這樣做:

console.log(players[i] + " " + (++i < iLen? players[i] : '')); 
+0

我將來一定會使用這個,謝謝你通知我。 – user2873801

0
# first get your shuffled players 
shuffled_players = players.shuffle(200) 

# loop through them 
for(var i=0; i<shuffled_players.length; i++){ 
    document.write(shuffled_players[i]); 
    # put either a space or break 
    document.write(i%2 == 0 ? " " : "<BR>"); 
}