我有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
如果我已经将答案集合作为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)
Run Code Online (Sandbox Code Playgroud)
如果目前没有定义答案,有没有办法可以重构它以使其工作.
您formData.answers在此声明中指定0 :
var maxNum = formData.answers = null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
Run Code Online (Sandbox Code Playgroud)
我的猜测是,你正在试图比较formData.answers来null.您想使用!=(或!==)而不是第二个=:
var maxNum = formData.answers != null ? Math.max.apply(Math, formData.answers.map(function (o) { return o.number; })) : 0;
Run Code Online (Sandbox Code Playgroud)
这解释了关于"对象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);
Run Code Online (Sandbox Code Playgroud)