2015-06-29 2 views
0

у меня есть переменная, как этоткак переформатировать этот массив javascript?

var item = [ 
      {'id': '1', 'quantity': '100'}, 
      {'id': '2', 'quantity': '200'} 
     ]; 

, но мне нужно, чтобы изменить как этот формат

var new_item = { 
      '1': {'quantity': '100'}, 
      '2': {'quantity': '200'} 
     }; 

я сделать петлю, как это, но ошибки

for(i=0; i<item.length; i++){ 
      new_item = { 
       item[i].id: {'quantity': item[i].quantity} 
      }; 
     } 

как я могу изменить этот формат T__T

UPDATE FIX:

ой да я просто нужно изменить как этот

for(i=0; i<item.length; i++){ 
      new_item[item[i].id] = {'quantity': item[i].quantity}; 
     } 

, которые работают, извините за мой проклятый вопрос, я думаю, что я слишком сонным, THx ребята^_^

+1

То есть не JSON (который является формат сериализации). Это просто массив объектов javascript. –

+1

Объекты имеют ** строку **, а не цифровые клавиши. – spender

+0

"но ошибки" ?? Вы должны поделиться своим опытом этих ошибок. – spender

ответ

2

Чтобы установить производные ключи, вам нужно использовать нотацию в виде кронштейна. Сначала инициализируйте new_item = {}.

new_item[item[i].id] = {quantity: item[i].quantity} 

Обратите внимание, что если вы используете ECMAScript6 вы можете использовать computed property names in object initializers как так;

new_item = { 
    [item[i].id]: {quantity: item[i].quantity} 
} 

Однако, это переписывает new_item каждый раз, так что в конечном счете только последнее значение массива.

1
for(i=0; i<item.length; i++){ 
    new_item[item[i].id] = {'quantity': item[i].quantity}; 
} 
1

Вы можете сделать это с помощью reduce, если вам не нужен IE 8 поддержка:

var newItem = item.reduce(function (o, c) { 
    o[c.id] = c.quantity; 
    return o; 
}, {}); 
+0

woah cool thx ^^ –

Смежные вопросы