其实题主的问题应该是问如何找出两个数组之间的差集。
如果是生产环境下,我会引入lodash这个工具库(如果是java的话引入guava库),然后用以下代码实现该需求:
var arr1 = [1,2,3];
var arr2 = [1,4,5];
_.difference(arr1, arr2); //返回存在于arr1中,而不存在于arr2中的元素集合
// return [2,3]
或
_.xor(arr1, arr2); //返回arr1和arr2中除共同元素外的所有元素集合
// return [2,3,4,5]
看了一下lodash里面difference的实现,核心内容大概就是arr1正向遍历,arr2逆向遍历,我试着写了一下:
function difference1(arr1, arr2) {
var result = [];
for(var i = 0, length = arr1.length; i < length;i++) {
var value = arr1[i];
for(var j = arr2.length - 1;j >= 0; j--) {
if (value === arr2[j]) {
j = NaN;
break;
}
}
if (!isNaN(j) && result.indexOf(value) === -1) {
result.push(value);
}
}
return result;
}
// 并不能确定difference1和difference2的性能是否相等
function difference2(arr1, arr2) {
var result = [];
for(var i = 0, length = arr1.length; i < length; i++) {
var value = arr1[i];
if (arr2.indexOf(value) === -1) {
result.push(value);
}
}
return result;
}
当然,这段代码还有很多可以优化的地方,例如剔除arr2中已经相等的元素,这里就不写了。