ключ объекта JavaScript и значение в виде массива - PullRequest
1 голос
/ 12 января 2012

я хочу создать объект динамически в форме - {"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);

Ответы [ 4 ]

6 голосов
/ 12 января 2012

Вам не нужно присваивать результат операции push.Вы можете просто позвонить catCmp[x1].push(y1);

3 голосов
/ 12 января 2012

В строке:

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

значение, возвращаемое catCmp[x1].push(y1), равно y1.Так что это значение, присвоенное catCmp[x1].

Как предлагается в других ответах, не выполняйте задание, просто выполните:

catCmp[x1].push(y1); 
0 голосов
/ 12 января 2012

Метод push JavaScript возвращает новую длину объекта, для которого вызывается метод push.

Итак, в вашем случае утверждение

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

делает catCmp [x1] = catCmp [x1] .length

Не только вам не нужно, вы не должныприсвойте результат операции push.Итак, просто используйте:

catCmp[x1].push(y1);
0 голосов
/ 12 января 2012
catCmp[x1].push(y1);
catCmp[x1].push(y2);
catCmp[x2].push(y3);
catCmp[x2].push(y4);
catCmp[x2].push(y1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...