2015-07-07 4 views
0

Предположим, у меня есть два списка. Один из существующих с некоторыми именами и новый, с некоторыми новыми именами, удаленные имена или все те же имена.Сортировка/пересечение двух массивов на две новые.

var currentList = ['Daniel', 'Lara', 'Horst']; 
var newList = ['Mario', 'Lara']; 

// Expected result 
toDelete = ['Daniel', 'Horst']; 
toAdd = ['Mario']; 

В конце мне нужны два массива, которые содержат новые имена и те, которые могут быть удалены. Имена, которые появляются в обоих массивах, можно игнорировать.

Я действительно не знаю, как назвать этот тип сортировки, поэтому даже модное слово могло бы помочь. Заметьте, что у меня нет jQuery.

Заранее спасибо.

+2

Если у вас нет ограничений на сторонние библиотеки, взять посмотрите http://underscorejs.org/. Это необходимо знать для такого рода вещей. В частности _.intersection(), _.difference() –

+0

Измените исходные типы данных на объекты, которые хранятся внутри как hashtables. Это может улучшить вашу производительность от O (n^2) до O (n). – bcorso

ответ

2

Thats довольно просто, вы можете сделать это с 2-мя петлями:

var currentList = ['Daniel', 'Lara', 'Horst']; 
var newList = ['Mario', 'Lara']; 

var toDelete = []; 
var toAdd = []; 
for(var i=0;i<newList.length;i++){ 
    if(currentList.indexOf(newList[i]) >-1) 
     toAdd.push(newList[i]) 
} 

for(var i=0;i<currentList.length;i++){ 
    if(newList.indexOf(currentList[i]) == -1) 
     toDelete.push(currentList[i]); 
} 

console.log('dele',toDelete); 
console.log('add',toAdd); 

Живой пример: http://jsfiddle.net/r6L7LpeL/

+0

Ах! Спасибо, что отлично работает, но я уже решил это с помощью фильтра http://jsfiddle.net/r6L7LpeL/1/ –

-1

Сначала создать третий массив, который является пересечение текущего и нового списка. Во-вторых, удалите этот массив из каждого массива.

Псевдо код:

var intersection_list = intersection(currentList, newList) 
var toDelete = currentList - intersectionList; 
var toAdd = newList - intersectionList; 

Вы можете использовать упомянутые выше библиотеки для _.intersection() и _.difference()

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