我想动态创建一个形式的对象 - {“abc”:[x1,x2],“efg”:[x3,x4,x1]} 以下代码不起作用..这里有什么问题?
var catCmp = {};
var x1="abc";
var x2="efg";
var y1="x1";
var y2="x2";
var y3="x3";
var y4="x4";
if (typeof catCmp[x1] === 'undefined') {
catCmp[x1] = [];
}
if (typeof catCmp[x2] === 'undefined') {
catCmp[x2] = [];
}
catCmp[x1] = catCmp[x1].push(y1);
catCmp[x1] = catCmp[x1].push(y2);
catCmp[x2] = catCmp[x2].push(y3);
catCmp[x2] = catCmp[x2].push(y4);
catCmp[x2] = catCmp[x2].push(y1);
console.log('catCmp :::', catCmp);
答案 0 :(得分:6)
您无需返回推送操作的结果。您只需拨打catCmp[x1].push(y1);
答案 1 :(得分:3)
在行中:
catCmp[x1] = catCmp[x1].push(y1);
catCmp[x1].push(y1)
返回的值是y1
的值。这是分配给catCmp[x1]
的值。
正如其他答案中所建议的那样,不要做任务,只需这样做:
catCmp[x1].push(y1);
答案 2 :(得分:0)
catCmp[x1].push(y1);
catCmp[x1].push(y2);
catCmp[x2].push(y3);
catCmp[x2].push(y4);
catCmp[x2].push(y1);
答案 3 :(得分:0)
JavaScript push method返回调用push方法的对象的新长度。
所以,在你的情况下,声明
catCmp[x1] = catCmp[x1].push(y1);
使catCmp [x1] = catCmp [x1] .length
不只是你不需要,你不应该分配推送操作的结果。所以,只需使用:
catCmp[x1].push(y1);