我的代码如下:
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]);
答案 0 :(得分:4)
push
返回数组的新长度,而不是数组,所以这一行:
result[questions[i].group] = questionsInGroup.push(questions[i]);
...用数字覆盖对数组的引用。只需删除作业。
附注:通常最好完全避开Array
构造函数(改为使用[]
),并且总是最好避免如果你只用一个参数调用它就可以了。如果你给Array
构造函数一个参数作为一个数字,那么你将获得一个空数组,其length
设置为该数字;但如果你用任何其他类型的参数调用它,你会得到一个length
1
包含该参数的数组。
示例:
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;
因此,我会替换:
result[questions[i].group] = new Array(questions[i]);
与
result[questions[i].group] = [questions[i]];