javascript - 如果数组中只有一个元素,forEach 不会运行吗?

标签 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 解决此问题,或者我是否需要仅针对只有一个主题的情况编写代码?

最佳答案

如果存在多个项目,某些 API 函数通常会返回数组;如果仅存在一项,则返回一个项目而不是“包含一项的数组”。因此,topicService.topics 甚至可能不包含数组。

这很可能是 forEach 在您的情况下失败的原因。所以添加一个检查:

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

关于javascript - 如果数组中只有一个元素,forEach 不会运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32311868/

相关文章:

javascript - 如何使用 mvvm 在日历中设置多个日期?

javascript - 将 Data 对象从 apollo hook 调用转换为 Javascript 数组

javascript - HTML 下拉元素点击后消失

javascript - 无法在 Angular 5 中将 http 响应作为字符串获取

javascript - TypeScript 中的对象类型转换

javascript - 移动设备最准确的 GPS 位置

javascript - 从 Node js 子目录提供 Angular 4 应用程序时,语法错误 : expected expression, 得到 '<'

javascript - 格式化 Angular JS/Bootstrap 选项卡

angularjs - Angular UI Router 单独的文件

Angular Testing 如何防止 ngOnInit 调用直接测试方法