在数组中填充

时间:2013-04-13 15:56:31

标签: javascript arrays multidimensional-array

我正在尝试生成包含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);

2 个答案:

答案 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);