如果数组中只有一个元素,forEach是否会运行?

时间:2015-08-31 12:58:32

标签: javascript angularjs typescript

我创建了以下代码:

                topicService.topics.forEach(function (row: ITopicRow) {
                    if (row.topicId == $stateParams.topicId) {
                        row.current = true;
                        topicService.topic = angular.copy(row);
                        topicService.topicBase = angular.copy(row);
                    } else {
                        row.current = false;
                    }
                })

当调用函数代码并将$ stateParams.topicId设置为数字时,它会搜索行并在该特定行上将current设置为true。

但是我遇到的问题是,如果只有一个主题,它就不起作用。在这种情况下,forEach甚至不运行。下面是显示长度为1的行。我还可以看到当我将鼠标悬停在主题上时,表示它是一个数组[]。

var x = topicService.topics.length; x = 1<<<<<<<<

请注意,当我把它放在forEach之前,并且当我在forEach的第一行放置一个调试点时,它就不会去那里。

我是否有某种方法可以使用forEach解决这个问题,或者我是否需要只针对只有一个主题的情况编写代码?

2 个答案:

答案 0 :(得分:2)

如果存在多个项目,则某些API函数返回数组并且如果仅存在一个项目则返回项目而不是"array with one item"。因此,topicService.topics甚至可能不包含数组。

最有可能的是,为什么forEach在你的情况下失败了。所以添加一张支票:

if( topicService.topics.constructor === Array) {
    // do foreach
}

答案 1 :(得分:0)

如果只有一个,那么每个都可以工作,你必须在代码中的其他地方出错,尝试在运行forEach之前打印出topicService.topics中的元素数量我猜想有什么东西将它改为0 < / p>