我有以下代码:
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 :(得分:5)
您在此声明中为formData.answers
分配0:
var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
我的猜测是您要将formData.answers
与null
进行比较。您想使用!=
(或!==
)而不是第二个=
:
var maxNum = formData.answers != null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
这解释了关于“对象0没有方法'推送'的奇怪消息”。但请注意,如果formData.answers
为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);
答案 1 :(得分:2)
只需检查密钥是否存在,如果不存在,请创建密钥:
if (!formData.hasOwnProperty("answers") || formData.answers === null) {
formData.answers = [];
}
答案 2 :(得分:1)
初始化这个变量:
formData.answers = new Array();
然后记得将它视为一个数组。