JS括号表示法澄清

时间:2017-03-06 18:45:30

标签: javascript arrays iteration

提前致谢。我在JavaScript中有一个概念问题;

function rand(x,z)
  { return x + Math.floor((z-x+1)*Math.random()); }

function getLetter()
  { return ['a', 'b', 'c', 'd', 'e', 'f'][rand(0,5)]; }

console.log(getLetter());    // f  // a  // c  .....

我无法理解getLetter()函数如何通过返回两个数组来记录随机选择的字母。如果我反转数组顺序,它将作为undefined登录到控制台。

最终,我之前没有看过这种语法,它让我措手不及。 getLetter()函数的行为与.map().filter()方法的行为方式相同吗?

5 个答案:

答案 0 :(得分:3)

将返回值视为从数组中随机选取的行:

var letters = ['a', 'b', 'c', 'd', 'e', 'f']

Array (
  0 => 'a',
  1 => 'b',
  2 => 'c',
  3 => 'd',
  4 => 'e',
  5 => 'f'
)

[rand(0,5)]是行选择器(从第一行id到最后一行id的随机数,从0到5)。

您的getLetter()功能可以被视为:

function getLetter() {
  var letters = ['a', 'b', 'c', 'd', 'e', 'f'];
  return letters[rand(0,5)];
}

答案 1 :(得分:1)

rand返回传入的两个数字之间的随机整数(包含 - 05是有效的返回值,以及它们之间的任何整数。)

getLetter利用它作为在包含六个字母的字母数组中获取随机索引的方法。所以这个:

['a', 'b', 'c', 'd', 'e', 'f'][rand(0,5)]

致电rand。让我们假装它返回2。那么我们就有了:

['a', 'b', 'c', 'd', 'e', 'f'][2]

这是阵列中的第三项,所以' c'归还。

答案 2 :(得分:1)

没有两个阵列。有一个数组并使用括号表示法引用数组中的索引。以下是代码的基本功能:

function getLetter() { 
   var options = ['a', 'b', 'c', 'd', 'e', 'f'],  //defined array
       randomNumber = rand(0,5),  //generate random number
       selection = options[randomNumber];  //reference index with the random number
    return selection;  //return the value
}

答案 3 :(得分:0)

您的getLetter函数实际上正在返回单维数组的元素。基本上它是创建一个包含6个字符的数组(通过f),然后返回由rand函数生成的索引所指向的数组。

反向(return [rand(0,5)]['a', 'b', 'c', 'd', 'e', 'f'];)不起作用,因为在这种情况下生成的数组对象是一个单元素数组(包含0到5之间的随机数)。

答案 4 :(得分:0)

rand函数只返回包含间隔[0, 5]中的数字。

getLetter只会返回['a', 'b', 'c', 'd', 'e', 'f']中由rand生成的随机字符的charcater。

['a', 'b', 'c', 'd', 'e', 'f']是一个数组,另一方面,expression[x]将元素放在表达式数组x索引处,从零开始