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]不存在。所以你在'undefined'字符串中附加了一个随机的 3 个字母的单词。

只需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 回答