繁体   English   中英

嵌套嵌套的Java循环和array.reduce

[英]Javascript nested for loop and array.reduce

我是编程新手,并且是该站点的新手,我对嵌套循环有疑问。 这是代码:

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);
    },"");

}

代码的输出是这样的:“乔恩·雪诺是塔加里安”

现在,我的问题是,它是怎么发生的? 我对array.reduce()部分的工作方式有点了解。 我真正感到困惑的部分是嵌套的for循环是如何工作的(例如它如何产生32个charcode(空格键)以及如何使数组长度达到23并产生所需输出所需的单词)。

任何帮助将不胜感激。 非常感谢。

了解正在发生的事情的最好方法是在调试器中运行此代码,并逐步进行调试。 您的Web浏览器内置了功能齐全的调试器,您可以将其用于此功能,或者任何JavaScript IDE都可以使用。

但简短地说:

map数组的子数组中,第一个条目是字符代码,所有后续条目都是该字符应使用的位置。 因此,例如[111, 1, 6]告诉我们字符代码111( "o" )应该在结果中的位置1和6处。

我真正感到困惑的部分是嵌套的for循环是如何工作的(例如它是如何产生32个字符的(空格键)

32是map数组中倒数第二个条目中的第一个值,为[32, 3, 8, 11, 13] ,因此将其放在位置3、8、11和13处。

以及如何使数组长度达到23,并产生所需输出所需的字)。

通过循环遍历子数组,跳过第一个条目(通过将j从1而不是开头),并使用所有其他条目作为ans索引,它将第一个条目的值(字符代码)存储在ans

// The char code vvvvvvvvv
ans[map[i][j]] = map[i][0];
//  ^^^^^^^^^--- where to put it

然后最后,它使用String.fromCharCode循环遍历ans ,将每个条目转换为其字符,并将其附加到与reduce使用的累加器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM