2011-02-01 58 views
0

我在一個返回表單的燈箱腳本中做ajax調用。當窗體加載我打電話var initial = $('form').serializeArray();javascript,從數組中刪除相同的項目

當表單提交我打電話var final = $('form').serializeArray();

這給了我對象的兩個數組

, 我現在想要做的是在陣列比較每個對象並刪除那些沒有改變的。

我該怎麼做?

回答

0

我假設這兩個數組的長度相等,並且這兩個數組中的元素的順序相同。在這種情況下,你需要做的是查看第一個數組的每個元素,並將其與第二個數組的相應元素進行比較;如果它們匹配,則從兩個陣列中移除該位置的元素。

像這樣的東西應該工作(雖然我沒有測試過):

var i = 0; 
while (i < initial.length) { 
    if(initial[i] == final[i]) { 
     initial.splice(i,1); 
     final.splice(i,1); 
    } 
    else { 
     i++; 
    } 
} 
+0

does`.splice()`重新排序索引? 即即使項目3是相同的,我最終會得到'[object,object,undefined,object]`或`[object,object,object]`? – Hailwood 2011-02-01 11:36:29

0

最快的方式做到這一點,我認爲

var len = initial.length, i=0, changed=[]; 
/* I hope initial.length==final.length*/ 

    for(i; i<len; i++){ 
     /* 0== '' */ 
     if (initial[i]===final[i]) 
      changed[i] = final[i]; 
    } 

//現在

changed

我弄糊塗了問題

does .splice()重新排序索引?