2013-10-12 56 views
0

我有一個JavaScript對象數組。例如current_films[0].f_name, current_films[0].f_pattern等。我想數組複製到另一個類同如下:如何在javascript中複製JSON對象的數組

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

嘗試javascript for循環中的對象 –

+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在後面的代碼將導致修改臨時

如果不是期望谷歌「的JavaScript對象複製」行爲。

相關問題