2011-02-01 57 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()重新排序索引?