我正在尝试生成包含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);
答案 0 :(得分: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;
};
答案 1 :(得分: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);