can';不要让嵌套的forEach在Javascript中工作

can';不要让嵌套的forEach在Javascript中工作,javascript,arrays,foreach,nested,Javascript,Arrays,Foreach,Nested,所以我想这个标题是不言自明的。我有一些代码,里面有嵌套的forEach循环。循环在章对象数组上迭代。每个对象可以有多个子节点,也可以有多个子节点,依此类推 我希望最终得到一个数组,其中包含带有子节点的嵌套数组 到目前为止,我的代码如下所示: exports.chapter = function(req, res) { var chapters = [], result = []; chapters = exports.index(req, res);

所以我想这个标题是不言自明的。我有一些代码,里面有嵌套的
forEach
循环。循环在
对象数组上迭代。每个对象可以有多个子节点,也可以有多个子节点,依此类推

我希望最终得到一个数组,其中包含带有子节点的嵌套数组

到目前为止,我的代码如下所示:

exports.chapter = function(req, res) {
    var chapters = [],
        result = [];

    chapters = exports.index(req, res);

    chapters.forEach(function(chapter) {
        if(chapter.orphan){
            result.add({
                'chapter': chapter,
                'children': getChildren(chapter.children)
            });
        }
    });

    function getChildren(siblings) {
        var children = [];

        chapters.forEach(function(chapter) {
            if($.inArray(chapter, siblings)){
                children.add({
                    'chapter': chapter,
                    'children': getChildren(chapter.children)
                });
            }
        });

        return children;
    };
};

我没有得到任何错误,除了我的网页没有加载。它不会在我的控制台中写入任何内容。我认为这是设置中的一个问题,但我目前无法找到位置。真的希望你们能帮忙。

最可能的问题是:

if($.inArray(chapter, siblings)){
inArray是一个非常错误的方法:它返回一个索引,如果没有找到,则返回-1,而不是顾名思义的标志-1当然是真实的;而
0
(有效索引)是错误的,因此您的
if
可能希望

if($.inArray(chapter, siblings) != -1){
    // We found it...
}
或者可能

if($.inArray(chapter, siblings) == -1){
    // We didn't find it
}

最可能的问题是:

if($.inArray(chapter, siblings)){
inArray是一个非常错误的方法:它返回一个索引,如果没有找到,则返回-1,而不是顾名思义的标志-1当然是真实的;而
0
(有效索引)是错误的,因此您的
if
可能希望

if($.inArray(chapter, siblings) != -1){
    // We found it...
}
或者可能

if($.inArray(chapter, siblings) == -1){
    // We didn't find it
}

这有点奇怪。。我不明白你为什么用“添加”而不是“推送”方法。如果我试图将一个对象“添加”到数组中,我会得到一个常见的错误。是吗?

有点奇怪。。我不明白你为什么用“添加”而不是“推送”方法。如果我试图将一个对象“添加”到数组中,我会得到一个常见的错误。是吗?

你应该使用
filter()
map()
instead@SLaks:我能否说服您举一个例子,说明使用
filter()
map()
可以更好地解决我的问题?您应该使用
filter()
map()
instead@SLaks:我能否说服您举一个例子,说明使用
filter()
map()
可以更好地解决我的问题?刚刚尝试了您的建议。它似乎没有解决这个问题problem@MichaelTotKorsgaard当前位置我无法完全理解您在循环中试图实现的目标。我想以上只是问题的一部分。只是尝试了你的建议。它似乎没有解决这个问题problem@MichaelTotKorsgaard当前位置我无法完全理解您在循环中试图实现的目标。我想以上只是问题的一部分。更改
。将
添加到
。按
确定已修复网页加载;-)然而,当我尝试调用这个方法时,我得到一个错误,告诉我它无法加载ressource,然后我一直得到一个
socket.io
错误。我不知道错误是什么,也不知道它在我的代码中的什么位置。奇怪。正在更改
。将
添加到
。按
确定已修复网页加载;-)然而,当我尝试调用这个方法时,我得到一个错误,告诉我它无法加载ressource,然后我一直得到一个
socket.io
错误。我不知道错误是什么,也不知道它在我的代码中的什么位置。奇怪。