2013-10-12 2 views
0

У меня есть массив объектов в JavaScript. например current_films[0].f_name, current_films[0].f_pattern и т.д. Я хочу, чтобы скопировать массив в другой похож на следующее:Как скопировать массив объектов JSON в javascript

for(var i=0; i<current_films.length; i++) 
    { 
      if(current_films[i].f_material == Value) 
       { 
        temp[i] = current_films[i]; 
       } 
    } 

Однако, кажется, есть необъяснимая проблема, когда я делаю это. По необъяснимой проблеме я имею в виду, что код не выполняется, и массив не копируется по своему желанию.

Любая помощь была бы принята с благодарностью. Спасибо!

P.S. Не могли бы вы назвать, почему приведенный выше код не работает? Как и в случае, если я положил alert("Reached here");, он не будет выполнен. Любые идеи, почему это так?

+0

try javascript for in loop for object –

+2

Что такое 'Value'? Можете ли вы дать нам пример данных, которые вы ожидаете получить? –

+0

Ваш массив 'temp' будет разрежен - индексы не будут последовательно от 0, будут существовать только индексы из' current_film', которые соответствуют 'Value'. Это проблема? – Barmar

ответ

2

Одна из проблем, которые я вижу, заключается в том, что вы установили temp[i] в значение, которое означает, что в массиве temp будут пробелы. Вы можете использовать push(), чтобы добавить значение в temp, поэтому вам не нужно управлять двумя наборами индексов.

Вы также можете использовать JavaScript's Array.filter(), чтобы сделать это немного проще. Фильтр вернет новый массив значений из исходного массива, где ваша функция возвращает true.

var temp = current_films.filter(function(film) { 
    return (film.f_material === Value); 
}); 
+0

согласитесь! Хорошо, что вы указали, что «Array.filter» –

+0

считают клонирование, если требуется. – Mohit

+1

@nkron Я бы использовал === вместо == – Sriharsha

0

P.S. Не могли бы вы назвать, почему приведенный выше код не работает? Как и в случае, если я поставил предупреждение («Здесь был достигнут»), он не будет выполнен. Любые идеи, почему это так?

Я предположил бы, что f_material не определен для каждого элемента в массиве.

Если это так, я хотел бы использовать

if(typeof(current_films[i].f_material)!=='undefined') 
{ 
    if(current_films[i].f_material == Value) 
    { 
     temp[i] = current_films[i]; 
    } 
} 

Во всяком случае я хотел бы предложить вам ознакомиться с Отладчик JavaScript браузера (предполагается, что код работает в браузере)

Наконец, обратите внимание, что вы «повторно не копирования элементов на массив/объект:

темп [I] является ссылкой на current_films [I]

Изменение current_films позже в коде приведет к модификации Temp

Если это поведение не желательно Google для «JavaScript Object копия».

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