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

时间:2015-07-01 13:26:46

标签: javascript angularjs 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

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

3 个答案:

答案 0 :(得分:2)

subjectsObject,而不是Array,因为它有{}符号。如果您愿意使用1,则可以循环显示100Object.keys(subjects)作为键。您也可以将其作为空数组[])启动,然后根据需要设置subjects[1]subjects[100]的值,但是没有简写内联方式定义一个没有inbetween的数组的两个分离索引。

答案 1 :(得分:1)

su.subjects是一个对象,不是数组,forEach未定义Object

答案 2 :(得分:0)

我还要注意,forEach并未在所有版本的浏览器中实现(看着你,IE 8),因为直到ECMA 5.1才包括forEach。见forEach