将两个数组排序/交叉成两个新数组。

时间:2015-07-07 14:46:32

标签: javascript arrays sorting

我们假设我有两个列表。一个存在一些名称和一个新名称,可能有一些新名称,删除名称或仍然相同的名称。

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

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

最后我需要两个包含新名称和可删除名称的数组。两个数组中出现的名称都可以忽略。

我真的不知道该怎么称呼这种"排序",所以即使是流行语也可以提供帮助。请注意,我根本没有jQuery。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这很简单,你可以用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/

答案 1 :(得分:-1)

首先创建第三个数组,它是当前列表和新列表的交集。 其次,从每个数组中删除此数组。

伪代码:

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

您可以将上述库用于_.intersection()和_.difference()