javascript - 为什么我收到一条消息说 forEach 不是函数?

标签 javascript angularjs typescript

在我定义的 typescript 中:

class SubjectService implements ISubjectService {

    subject: any;
    subjectId: number = 0;
    subjects = {
        "1": { "id": 1, "name": "Java" },
        "100": { "id": 100, "name": "Test" }
    };

    static $inject = [
        "$http",
        "appConstant",
    ];

    constructor(
        public $http: ng.IHttpService,
        public ac: IAppConstant
        ) {
    }

}

然后我在我的构造函数中有这段代码:

class SubjectController {

    static $inject = [
        "$scope",
        "subjectService"
    ];

    constructor(
        public $scope,
        public su: ISubjectService
        ) {
        $scope.su = su;

        $scope.rowClicked = (subject, $index) => {
            var self = this;
            if (subject.current && subject.current == true) {
                return;
            }
            su.subjects.forEach(function (subject) {
                subject.current = false;
            });
            su.subject = subject;
            su.subject.current = true;
        }

    }

}

但是当它运行时我收到一条消息说:

TypeError: su.subjects.forEach 不是函数 在 Scope.SubjectController.$scope.rowClicked ( http://localhost:1810/app/controllers/SubjectController.js:12:25 )

有没有人知道可能出了什么问题。我在其他地方使用了类似的代码,但在这里每次都失败。

最佳答案

subjects 是一个Object,而不是一个Array,因为它的{} 符号。如果您喜欢使用 Object.keys(subjects),可以将 1100 作为键进行循环。您也可以将其作为一个空数组 ([]) 开始,然后设置 subjects[1]subjects[100] 的值如果您愿意,但没有一种简写的内联方式可以只定义一个数组的两个单独的索引,而没有中间的索引。

关于javascript - 为什么我收到一条消息说 forEach 不是函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162742/

相关文章:

javascript - angularjs ngrepeat img 嵌入

node.js - Angularjs socket.io 服务

typescript - 使用 TypeScript 进行部分应用

javascript - 创建可拖动的小部件系统

javascript - 如何在鼠标进入 div 时运行函数,反之亦然?

javascript - 从指令中的链接滚动到屏幕顶部不起作用

typescript - 声明任意嵌套数组(递归类型定义)

Angular : Service Injection vs Typescript Static Methods

javascript - Vue 模板或渲染函数尚未定义,但我两者都没有使用?

javascript - 迭代对象数组中存在的对象数组