0

我有以下代码:

var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
var emptyAnswer = {
    "number": maxNum + 1,
    "correct": false,
    "name": "",
    "notes": "",
    "topicId": formData.topicId
};
formData.answers.push(emptyAnswer);

如果我已经将答案集合作为 formData 的一部分,则该代码有效,但如果 formData.answers 为空,则它不起作用。它给出了一条消息:

TypeError: Object 0 has no method 'push'
    at Object.$scope.modalAddAnswer (http://127.0.0.1:81/Content/app/admin/controllers/question-controller.js:113:30)

如果当前没有定义答案,有没有办法可以重构它以使其工作。

4

3 回答 3

5

formData.answers在此语句中将 0 分配给:

var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;

我的猜测是您正在尝试formData.answersnull. 您想使用!=(or !==) 而不是第二个=

var maxNum = formData.answers != null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;

这就解释了关于“对象 0 没有方法‘推’”的奇怪消息。但是请注意,如果formData.answersis null,那么您push仍然无法正常工作;您需要设置formData.answers为一个空数组。我建议这段代码:

var maxNum = 0;
if (formData.answers == null) {
    formData.answers = [];
} else if (formData.answers.length > 0) {
    maxNum = Math.max.apply(Math,
        formData.answers.map(function (o) { return o.number; }));
}
formData.answers.push(emptyAnswer);
于 2013-08-11T15:25:30.117 回答
2

只需检查密钥是否存在,如果不存在,则创建它:

if (!formData.hasOwnProperty("answers") || formData.answers === null) {
    formData.answers = [];
}
于 2013-08-11T15:22:55.157 回答
1

像这样初始化该变量:

 formData.answers = new Array();

然后记住总是把它当作一个数组来对待。

于 2013-08-11T15:23:13.543 回答