2011-02-01 1 views
0

Я делаю вызов ajax в сценарии лайтбокса, который возвращает форму.javascript, удалять идентичные элементы из массива

при загрузке формы я называю var initial = $('form').serializeArray();

, когда форма была отправлена ​​я называю 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()' переупорядочить индексы? i.e если элемент 3 будет таким же, я в конечном итоге получаю '[объект, объект, неопределенный, объект]' или '[объект, объект, объект]'? – Hailwood

+0

splice эффективно удаляет элемент из массива (если дополнительные элементы не указаны, см. Http://www.w3schools.com/jsref/jsref_splice.asp) –

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]; 
    } 

// теперь играть с

Я запутался в вопросе

is .splice() изменить порядок индексов?