Javascript:这个`Array(i + 1)`做什么?

时间:2017-01-13 05:11:29

标签: javascript

您好我找到了解决代码问题的解决方案,我不确定语法的作用是什么。该函数接受一串字符,并根据长度以某种方式返回它。

input =“abcd”; output =“A-Bb-Ccc-Dddd” input =“gFkLM”; output =“G-Ff-Kkk-Llll-Mmmmm”

这家伙发布了这个解决方案

function accum(str) {
  var letters = str.split('');
  var result = [];
  for (var i = 0; i < letters.length; i++) {
    result.push(letters[i].toUpperCase() + Array(i + 1).join(letters[i].toLowerCase()));
  }
  return result.join('-');
}

有点困惑整体解决方案,但有一点特别唠叨我。看到Array(i + 1)?那是做什么的?对不起,谷歌不是一件容易的事。

4 个答案:

答案 0 :(得分:6)

我相信这会分配一个长度为i + 1的数组。但更重要的是,代码在做什么?您必须知道join()函数的作用...它连接由函数参数分隔的数组中的元素。例如:

['one', 'two', 'three'].join(' ') === 'one two three'

在这种情况下,数组中填充了undefined个元素,所以你会得到这样的结果:

[undefined].join('a') === ''
[undefined, undefined].join('b') === 'b'
[undefined, undefined, undefined].join('c') === 'cc'
[undefined, undefined, undefined, undefined].join('d') === 'ddd'

答案 1 :(得分:1)

所以在开头的声明中,我从0开始。现在如果你进入for语句里面说i + 1,我会是1.然后当for循环更新并且i等于1时,i + for循环中的1将等于2.此过程将继续为字符串的长度。希望这会有所帮助。

答案 2 :(得分:1)

我刚刚检查了

let x= Array(3);
console.log(x);

输出是[未定义,未定义,未定义]

因此它实际上创建了大小为3的数组,其中所有元素都是未定义的。 当我们将一个字符作为参数调用join时,它会创建一个具有相同字符重复2次的字符串,即(3-1)。

console.log(x.join('a')); //  logs aa

答案 3 :(得分:0)

评论代码漫步......但

function accum(str) {
    /* converts string to character array.*/
    var letters = str.split('');
    /* variable to store result */
    var result = [];
    /* for each character concat (1.) + (2.) and push into results.
       1. letters[i].toUpperCase() :
            UPPER-CASE of the character.
       2. Array(i + 1).join(letters[i].toLowerCase()) :
            create an array with EMPTY SLOTS of length that is, +1 than the current index. 
            And join them to string with the current charater's LOWER-CASE as the separator.

            Ex:
            Index   |   ArrayLength, Array      |   Separator   |   Joined String
            0           1, [null]                   'a'             ''
            1           2, [null,null]              'b'             'b'
            2           3, [null,null,null]         'c'             'cc'
            3           4, [null,null,null,null]    'd'             'ddd'

            NOTE: 
            Join on an array with EMPTY SLOTS, inserts the seperator inbetween the slot values.
            Meaning, if N is the length of array. Then there will be N-1 seperators inserted into the joined string

    */
    for (var i = 0; i < letters.length; i++) {
        result.push(letters[i].toUpperCase() + Array(i + 1).join(letters[i].toLowerCase()));
    }

    /* finally join all sperated by '-' and return ...*/
    return result.join('-');
}