为什么在有's没有在Javascript中定义集合

Why does push not work when there's no collection defined in Javascript?

本文关键字:Javascript 集合 定义 为什么      更新时间:2023-09-26

我有以下代码:

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为null,则它不起作用。它给出了一个信息:

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)

如果目前还没有定义答案,有没有一种方法可以重构它使其工作。

您在以下语句中将0分配给formData.answers

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

我的猜测是,你试图将formData.answersnull进行比较。您希望使用!=(或!==)而不是第二个=:

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

这解释了关于"对象0没有方法"push"的奇怪消息。但是,请注意,如果formData.answersnull,那么您的push仍然不起作用;您需要将CCD_ 10设置为一个空数组。我建议这个代码:

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);

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

if (!formData.hasOwnProperty("answerswers") || formData.answers === null) {
    formData.answers = [];
}

初始化变量如下:

 formData.answers = new Array();

然后记得永远把它当作一个数组。