2013-12-19 4 views
0

Я перебираю массив response, и я хочу поместить некоторые значения из него в объект data, но мой метод ниже не работает («данные [i] не определены»).Как я могу создать объект Javascript на лету в цикле?

var data = {}, 
    i = 0; 

$(response).each(function(){ 
    data[i].title = response.title; // This does not work 
    data[i].id = response.id; 
    i++; 
} 

Я хочу получившийся объект data выглядеть следующим образом:

{ 
    0: { 
      title: "First title", 
      id: "First id" 
     }, 

    1: { 
      title: "Second title", 
      id: "Second id" 
     }, 
} 

Как я могу добиться этого?

+0

Посмотрите на документацию для [jQuery each()] (http://api.jquery.com/jQuery.each/) – epascarello

+0

Вам нужно узнать больше о разнице между массивами и объектами. – givanse

ответ

1

Try:

var data = {}, 
    i = 0; 

$(response).each(function(){ 
    data[i] = {}; // Initialize an object first before assigning values: data[i] = {};. 
    data[i].title = this.title; //Use this instead of response 
    data[i].id = this.id; 
    i++; 
}); 
+0

Спасибо, но зачем использовать это вместо ответа? Любые различия в результатах? – Weblurk

+0

@Weblurk: 'this' - текущий элемент в цикле, а' response' - ваш массив –

0

Просто попробуйте:

var data = []; 

$(response).each(function(index, element){ 
    data.push({ 
     title: element.title, 
     id: element.id 
    }); 
} 

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

data[0]; // [1], [2] ... 
+0

Почему мой ответ был опущен? – hsz

+0

Возможно, потому, что структура не соответствует тому, что задал ОП. В равной степени 'response.title' не ссылается на элемент на каждой итерации цикла' .each() ' –

+0

OP здесь. FYI, я никого не трогал. – Weblurk

1

Вы не ссылаетесь каждый индекс ответа, вы ссылаетесь свойства от массива/объекта

$(response).each(function(index){ 
    data[i].title = response[index].title; 
    data[i].id = response[index].id; 
    i++; 
}); 
+0

JSFiddle показывает, что он работает: http://jsfiddle.net/auK9A/ – epascarello

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