0

ランダムな 3 文字の 10 項目配列を生成しようとしています。この配列で余分なパディングを取得しているのはなぜですか? (["undefineddhe", "undefinedjih", "undefinedeih", "undefinedfjj", "undefinedhdb", "undefinedidc", "undefinedhbk", "undefinedggd", "undefinedfeg", "undefinedcgk"])

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
(function rand(alpha){
   var sequence = [];
   for(var i = 0; i < 10; i++){(function(i){
       for(var j = 0; j < 3; j++){(function(j){
         sequence[i] += alpha[Math.floor(Math.random()*10)+1];
       })(j)}
   })(i)}
return sequence;
})(arr);
4

2 に答える 2

3

あなたが言っているのでsequence[i] += ...

デフォルトsequence[i]ではundefinedです。

var a;
a += "hello";
console.log(a); // "undefinedhello"

var b = "";
b += "hello";
console.log(b); // "hello"

これを修正できます:

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
(function rand(alpha){
   var sequence = [];
   for(var i = 0; i < 10; i++){(function(i){
       sequence[i] = "";
       for(var j = 0; j < 3; j++){(function(j){
         sequence[i] += alpha[Math.floor(Math.random()*10)+1];
       })(j)}
   })(i)}
return sequence;
})(arr);

ところで。スクリプトが同期を実行しているため、すべてのクロージャーを実行する必要はありません。

 var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
(function rand(alpha) {
   var sequence = [];
   for(var i = 0; i < 10; i++){
       sequence[i] = "";
       for(var j = 0; j < 3; j++){
         sequence[i] += alpha[Math.floor(Math.random()*10)+1];
       }
   }
   return sequence;
})(arr);

または、名前付き関数を作成することを好むと思います:

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];

var a = sequence(arr);

function sequence(alpha) {
   var sequence = [];
   for(var i = 0; i < 10; i++){
       sequence[i] = "";
       for(var j = 0; j < 3; j++){
         sequence[i] += alpha[Math.floor(Math.random()*10)+1];
       }
   }
   return sequence;
};
于 2013-04-13T16:02:27.203 に答える
1

「余分なパディング」を取得していません.JSは存在しないundefinedため、文字列に変換されますsequence[i]。したがって、ランダムな 3 文字の単語を'undefined'文字列に追加しています。

sequence[i] = '';次のように、最初のループ内に追加するだけです。

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
(function rand(alpha){
   var sequence = [];
   for(var i = 0; i < 10; i++){(function(i){
       sequence[i] = '';
       for(var j = 0; j < 3; j++){(function(j){
         sequence[i] += alpha[Math.floor(Math.random()*10)+1];
       })(j)}
   })(i)}
return sequence;
})(arr);
于 2013-04-13T16:02:02.170 に答える