2012-01-27 29 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は、あなたが –

+0

おかげ@AndyE :-)デモを含ま解答し、改訂されたコード*と*の両方を持つポストに私を打つ - 面白いどのように似て、私たちの答え私たちが両方とも作業配列の新しい変数を作成するのではなく、 'strin'変数/引数を再利用したという点でさえも、私の同僚の何人かが眉をひそめているのですが、明らかに私はいつも明白なように思っています。 – nnnnnn

+0

ええ、私は同じと思った。唯一の違いは私たちが置いたところです:-)。私は頻繁に使っていない練習です、私は言わなければなりません。私が全部自分自身で書いたのであれば、(var文、追加変数などのように)いくつかの異なるものを実行していたでしょうが、 'strin'変数を再利用するとOPコードの変更が少なくなりました。 ...ちょうど私の部分の怠惰にそれを置く;-) –

関連する問題