JavaScript 对象键和值作为数组

javascript object key and value as array

本文关键字:数组 键和值 对象 JavaScript      更新时间:2023-09-26

我想动态创建一个形式的对象 - {"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);

无需重新分配推送操作的结果。您可以简单地调用catCmp[x1].push(y1);

在行中:

catCmp[x1] = catCmp[x1].push(y1); 

catCmp[x1].push(y1)返回的值是 y1 的值。所以这就是分配给catCmp[x1]的值。

正如其他答案中所建议的,不要做作业,只要做:

catCmp[x1].push(y1); 
catCmp[x1].push(y1);
catCmp[x1].push(y2);
catCmp[x2].push(y3);
catCmp[x2].push(y4);
catCmp[x2].push(y1);
JavaScript push 方法

返回调用 push 方法的对象的新长度。

因此,在您的情况下,声明

catCmp[x1] = catCmp[x1].push(y1);
make catCmp[x1]

= catCmp[x1].length

不仅不需要,也不应该重新分配推送操作的结果。因此,只需使用:

catCmp[x1].push(y1);