对象数组 - 没有方法'推送'

时间:2014-10-06 07:53:55

标签: javascript node.js

我的代码如下:

var result = {};

for (var i = 0; i < questions.length; i++)
{
  if(result.hasOwnProperty(questions[i].group)) {
    var questionsInGroup = result[questions[i].group];
    log.debug(typeof questionsInGroup);
    result[questions[i].group] = questionsInGroup.push(questions[i]);
} else {
    result[questions[i].group] = new Array(questions[i]);
}

这里我试图创建一个关联数组,其中键是字符串,值是对象数组。

当我启动此代码时,我收到错误:

result[questions[i].group] = questionsInGroup.push(questions[i]);
                                              ^
TypeError: Object 2 has no method 'push'

调试消息如下:

debug:[node / server.js] number

为什么'questionsInGroup'是一个数字,如果我把它创建为数组:

result[questions[i].group] = new Array(questions[i]);

1 个答案:

答案 0 :(得分:4)

push返回数组的新长度,而不是数组,所以这一行:

result[questions[i].group] = questionsInGroup.push(questions[i]);

...用数字覆盖对数组的引用。只需删除作业。


附注:通常最好完全避开Array构造函数(改为使用[]),并且总是最好避免如果你只用一个参数调用它就可以了。如果你给Array构造函数一个参数作为一个数字,那么你将获得一个空数组,其length设置为该数字;但如果你用任何其他类型的参数调用它,你会得到一个length 1包含该参数的数组。

示例:

&#13;
&#13;
var a;

a = new Array(2);
display(a.join(", ") + " (" + a.length + ")");

a = new Array("2");
display(a.join(", ") + " (" + a.length + ")");

function display(msg) {
  var p = document.createElement("p");
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}
&#13;
&#13;
&#13;

因此,我会替换:

result[questions[i].group] = new Array(questions[i]);

result[questions[i].group] = [questions[i]];