2012-07-23 29 views
0

希望你能幫助,我的有趣項目已接近完成,但我有一個最終修復的錯誤。數組值被多次調用,我如何限制它,使每個值都是唯一的?

我有一個數組混合一組值,然後把它們吐出成隨機段落。 問題是,當我傾倒這些洗牌詞有些被稱爲無數次,我需要每個值只打印一次。

$("#generatebutt").click(function() { 

var dumpStr = ""; 
var lengthOfParagraph = $('#length').val(); 
var numberOfParagraph = $('#numberpara').val(); 

for (var i = 0; i < numberOfParagraph; i++) { 
    ShuffleWords(melbArray); 

    for (var j = 0; j < lengthOfParagraph; j++) { 
     var theWords = melbArray[j];     
     if(j == 0){ 
      dumpStr += theWords.charAt(0).toUpperCase(); 
      theWords = theWords.substring(1) 
     } 
     else { 
     } 
     if(j % 5 == 1){ 
      dumpStr += theWords + ", "; 
     } 
     else { 
      dumpStr += theWords + " "; 
     } 
    } 
    dumpStr = $.trim(dumpStr); 
    dumpStr += ".<br/><br/>"; 
} 
$("#dump").html(dumpStr); 

非常感謝!

+0

什麼在ShuffleWords(melbArray); ??? – swapnesh 2012-07-23 11:08:35

+0

你的意思是每個段落打印一次值還是隻打印一次?你的內循環在外循環的每次迭代中從0重新開始,所以當外循環增量時,melbArray [j]'將始終從頭開始 – nbrooks 2012-07-23 11:10:34

+0

是的,我希望每個段落打印一次,如果它出現再次在第二或第三,那很好。在jsfiddle上查看我的代碼:http://jsfiddle.net/GUfFF/84/ – hath22 2012-07-23 11:43:38

回答

0

工作演示http://jsfiddle.net/Ehqzj/1/

我想你需要的是抓住從你的陣列和在這種情況下,這應該有助於一個獨特單詞的方式,其他人可以請你輕拂你的HTML作爲好;否則只能獲得唯一的值。

希望它符合您的需求:)

代碼

您可以使用array.filter做花樣 -

var a=["hulk","hulk","thor","thor","ironman","hawk","hawk"]; 

var unique=a.filter(function(itm,i,a){ 
    return i==a.indexOf(itm); 
}); 

alert(unique); 


// Return set will be **Unique** words only: hulk,thor,ironman,hawk 
+0

請注意,Array方法'filter'和'indexOf'是相對較新的,所以舊版瀏覽器(特別是IE <9)不會支持他們。 – RoToRa 2012-07-23 11:26:17

+0

Hiya @RoToRa謝謝,':)'有趣我以爲JQ lib會照顧它,確實**但是** IE只是一個有趣的瀏覽器聽說它有console.log問題:P IE 8我認爲:P任何人與IE瀏覽器?可以看到它的表現如何「B-」)歡呼傢伙! – 2012-07-23 11:29:16

0

首先克隆陣列(在你的函數的開始)通過做:

var newArray = melbArray.slice(); 

然後,使用新數組在引用它時從數組中刪除值。變化:

var theWords = melbArray[j];

var theWords = newArray.splice(j, 1)[0];

.splice()該方法刪除索引j的條目,並返回包含只是一個新的數組(I加入[0]返回元件本身)。此操作後,舊數組將不再包含此值。

+0

根據您的索引工作方式,您可能還需要對環路條件進行一些更改以防止數組索引超出範圍問題 – nbrooks 2012-07-23 11:25:17

+0

工作得很好,但不幸的是,我無法使用此方法,因爲用戶希望重新運行該函數,並在幾次運行後沒有值。 – hath22 2012-07-23 11:35:28

+0

@ user1523498如果這是此方法的唯一問題,那麼您可以先簡單地克隆它,如更新所示:) – nbrooks 2012-07-23 13:04:03

相關問題