Javascript 嵌套 for 循环和 array.reduce
Javascript nested for loop and array.reduce
我是编程新手,也是本网站的新手,我有一个关于嵌套 for 循环的问题。这是代码:
function eddardStarkSecret() {
var ans =[];
var map = [
[111, 1, 6], [110, 2, 5, 22], [115, 10], [83, 4], [119, 7],
[105, 9], [97, 12, 15, 18], [84, 14], [114, 16, 19],
[103, 17], [121, 20], [101, 21], [32, 3, 8, 11, 13], [74,0]
];
for (var i = 0; i < map.length; i++) {
for (var j = 1; j < map[i].length; j++)
ans[map[i][j]] = map[i][0];
}
return ans.reduce(function (prev, curr) {
return prev + String.fromCharCode(curr);
},"");
}
代码的输出是这样的:"Jon Snow is a Targaryen"
现在,我的问题是,这是怎么发生的?我对 array.reduce() 部分的工作原理略有了解。我真正感到困惑的部分是嵌套 for 循环是如何工作的(比如它是如何产生 32 字符码(space 条)以及它是如何使数组长度为 23 并产生所需的单词输出)。
任何帮助将不胜感激。非常非常感谢。
了解正在发生的事情的最佳方法是 运行 在调试器中逐步执行此代码。您的网络浏览器内置了一个 fully-featured 调试器,您可以使用它,或者任何 JavaScript IDE 都可以。
但简而言之:
在map
数组的子数组中,第一个条目是字符代码,所有后续条目都是应该使用该字符的地方。因此,例如,[111, 1, 6]
告诉我们字符代码 111 ("o"
) 应该位于结果中的位置 1 和 6。
The part where i am really confused at is how the nested for loop worked(like how did it produce the 32 charcode(space bar)
32 是 map
数组中 second-to-last 条目的第一个值,即 [32, 3, 8, 11, 13]
,所以它被放在位置 3、8、11 和 13 .
and how did it made the array length to 23 and produce the words needed for the desired output).
通过遍历子数组,跳过第一个条目(通过从 j
开始而不是 ),并将所有其他条目用作 ans
的索引,其中存储ans
:
中的第一个条目(字符代码)
// The char code vvvvvvvvv
ans[map[i][j]] = map[i][0];
// ^^^^^^^^^--- where to put it
然后在最后它只是循环遍历 ans
使用 String.fromCharCode
将每个条目转换为其字符并将其附加到与 reduce
一起使用的累加器。
我是编程新手,也是本网站的新手,我有一个关于嵌套 for 循环的问题。这是代码:
function eddardStarkSecret() {
var ans =[];
var map = [
[111, 1, 6], [110, 2, 5, 22], [115, 10], [83, 4], [119, 7],
[105, 9], [97, 12, 15, 18], [84, 14], [114, 16, 19],
[103, 17], [121, 20], [101, 21], [32, 3, 8, 11, 13], [74,0]
];
for (var i = 0; i < map.length; i++) {
for (var j = 1; j < map[i].length; j++)
ans[map[i][j]] = map[i][0];
}
return ans.reduce(function (prev, curr) {
return prev + String.fromCharCode(curr);
},"");
}
代码的输出是这样的:"Jon Snow is a Targaryen"
现在,我的问题是,这是怎么发生的?我对 array.reduce() 部分的工作原理略有了解。我真正感到困惑的部分是嵌套 for 循环是如何工作的(比如它是如何产生 32 字符码(space 条)以及它是如何使数组长度为 23 并产生所需的单词输出)。
任何帮助将不胜感激。非常非常感谢。
了解正在发生的事情的最佳方法是 运行 在调试器中逐步执行此代码。您的网络浏览器内置了一个 fully-featured 调试器,您可以使用它,或者任何 JavaScript IDE 都可以。
但简而言之:
在map
数组的子数组中,第一个条目是字符代码,所有后续条目都是应该使用该字符的地方。因此,例如,[111, 1, 6]
告诉我们字符代码 111 ("o"
) 应该位于结果中的位置 1 和 6。
The part where i am really confused at is how the nested for loop worked(like how did it produce the 32 charcode(space bar)
32 是 map
数组中 second-to-last 条目的第一个值,即 [32, 3, 8, 11, 13]
,所以它被放在位置 3、8、11 和 13 .
and how did it made the array length to 23 and produce the words needed for the desired output).
通过遍历子数组,跳过第一个条目(通过从 j
开始而不是 ),并将所有其他条目用作 ans
的索引,其中存储ans
:
// The char code vvvvvvvvv
ans[map[i][j]] = map[i][0];
// ^^^^^^^^^--- where to put it
然后在最后它只是循环遍历 ans
使用 String.fromCharCode
将每个条目转换为其字符并将其附加到与 reduce
一起使用的累加器。