2014-01-15 2 views
-1

Я пытаюсь преобразовать массив в объект, и я почти там.JavaScript: преобразование массива в объект

Вот мой входной массив:

[ {id:1,name:"Paul"}, 
    {id:2,name:"Joe"}, 
    {id:3,name:"Adam"} ] 

Вот мой выходной ток объекта:

{ '0': {id:1,name:"Paul"}, 
    '1': {id:2,name:"Joe"}, 
    '2': {id:3,name:"Adam"} } 

Здесь мой требуемый выход объекта:

[ {id:1,name:"Paul"}, 
    {id:2,name:"Joe"}, 
    {id:3,name:"Adam"} ] 

Вот мой текущий код :

function toObject(arr) { 
    var rv = {}; 
    for (var i = 0; i < arr.length; ++i) 
    if (arr[i] !== undefined) rv[i] = arr[i]; 
    return rv; 
} 
+3

Ваш желаемый результат является недопустимым JSON –

+0

нужный формат не supportd I n ECMA5, каждый объект должен иметь идентификатор, например, в вашем текущем выходе – lexasss

+2

Вопрос в том, почему вам нужны ваши данные в такой форме? –

ответ

7

Вы не можете этого сделать.

{ {id:1,name:"Paul"}, 
    {id:2,name:"Joe"}, 
    {id:3,name:"Adam"} } 

Является недействительным объектом JavaScript.

Объекты в javascript являются парами ключ-значение. Посмотрите, как у вас есть id, а затем двоеточие, а затем номер? Номер key: id, а номер value.

У вас не было бы доступа к свойствам, если вы это сделали.

Вот результат из консоли Firefox:

{ {id:1,name:"Paul"}, 
    {id:2,name:"Joe"}, 
    {id:3,name:"Adam"} } 
SyntaxError: missing ; before statement 
+0

Извините, я обновил свой желаемый формат вывода, пожалуйста, проверьте сейчас – Paul

1

Поскольку объекты требуют пару ключ/значение, можно создать объект с идентификатором в качестве ключа и имени в качестве значения:

function toObject(arr) { 
    var rv = {}; 
    for (var i = 0; i < arr.length; ++i) 
    if (arr[i] !== undefined) rv[arr[i].id] = arr[i].name; 
    return rv; 
} 

выход:

{ 
    '1': 'Paul', 
    '2': 'Jod', 
    '3': 'Adam' 
} 
+0

Извините, я обновил свой желаемый формат вывода, пожалуйста, отметьте сейчас – Paul

+3

@Paul теперь вы возитесь с нами. Ваши входные и выходные форматы идентичны! – tkone

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