您好我找到了解决代码问题的解决方案,我不确定语法的作用是什么。该函数接受一串字符,并根据长度以某种方式返回它。
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)
?那是做什么的?对不起,谷歌不是一件容易的事。
答案 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('-');
}