2012-01-27 10 views
1

我有一個小字符串和一個固定的種子,我試圖用給定的種子改變所有的字符串元素,使其可重複。用種子改換字符串

這裏是我的代碼:

function shufff(strin,seed){ 
    var tem; 
    var j; 
    var tt = strin.length; 
    for(var i=0; i<tt; i++){ 
     j = (seed % (i+1) + i) % tt; 
     tem=strin[i]; 
     strin[i] = strin[j]; 
     strin[j] = tem; 
    } 
    return strin; 
} 

var tom='tomollow'; 
alert(shufff(tom,6543)); 

這將返回初始字符串沒有洗牌。

我在做什麼錯?

回答

1

對JavaScript字符串中單個字符的數組式訪問是只讀。 (並且在舊版瀏覽器中根本不支持)。

對代碼進行微小更改才能使其工作,將字符串轉換爲數組進行處理,然後在返回時將其轉換回字符串:

function shufff(strin,seed){ 
    strin = strin.split(""); 
    var tem; 
    var j; 
    var tt = strin.length; 
    for(var i=0; i<tt; i++){ 
     j = (seed % (i+1) + i) % tt; 
     tem=strin[i]; 
     strin[i] = strin[j]; 
     strin[j] = tem; 
    } 
    return strin.join(""); 
} 

工作演示:http://jsfiddle.net/fcKDN/

+0

+1,你打我的答案都與修改後的代碼*和*崗位包括演示:-) – 2012-01-27 09:53:34

+0

感謝@AndyE - 滑稽多麼相似我們的答案最終,甚至到了我們都重複使用'strin'變量/參數而不是爲工作數組創建一個新變量(一種做法我的一些同事皺起眉頭,但顯然我更喜歡它,只要在任何特定情況下似乎都清楚)。 – nnnnnn 2012-01-27 10:06:37

+0

是的,我也這麼想。唯一的區別是我們把它放在:-)。這是我不經常使用的一種做法,我必須說。如果我自己寫了整個東西,我會做一些不同的事情(比如單個'var'語句,附加變量等),但重複使用'strin'變量意味着對OP代碼的更少修改,所以......只是放下了我的懶惰;-) – 2012-01-27 10:14:18