给定两个数组,返回一个仅由不相交项组成的数组

Given two Arrays, return an Array consisting only of the non-intersecting items

本文关键字:数组 两个 返回 一个      更新时间:2023-09-26

我在JavaScript中遇到了一个问题。

我有两个数组,我想检查它们是否在某些元素上相交,然后删除这些元素并返回不包含相交元素的新数组。

的例子:

Array A ( 
[0] => 0 [1] => 1 
)
Array B ( 
[0] => 2 [1] => 1 
)

我想检查它们并返回:

 Array result ( 
[0] => 0 [1] => 2 
)

我如何在JavaScript中做到这一点?

签出带下划线的库。

假设你有两个数组

var a = [1, 2];
var b = [2, 3];

首先查找并集。

var all = _.union(a, b);

然后找到交点

var common = _.intersection(a, b);

最终答案应该是并集与交集的差值。

var answer = _.difference(all, common)

Using Array。过滤器,数组。lastIndexOf和Array.indexOf:

var array1 = [1,2,3,4,5];
var array2 = [2,3];
var unique = array1.concat(array2)
                   .filter(function (item, index, array) {
                       return array.indexOf(item) == array.lastIndexOf(item);
                   })

这两种方法默认都不是100%跨浏览器的,但这两种链接都有安全的IE <= 8

既然您指定了jQuery,那么试试这个:

var arr1 = [2, 3, 4];
var arr2 = [1, 2, 3];
var arr3 = $.merge($.grep(arr1, function(el, idx) {
    return $.inArray(el, arr2) > -1;
}, true), $.grep(arr2, function(el, idx) {
    return $.inArray(el, arr1) > -1;
}, true));
alert(arr3);

这可能不是很有效,但它相对简洁。

纯js解决方案,不如使用jQuery时效率高:

function filter(a1, a2){
  var result = [];
  for(i in a1){
    exists = false;
    for(j in a2){
      if(a1[i] == a2[j])
        exists = true;
    }
    if(exists== false){
      result.push(a1[i]);
    }
  }
  return result;
}
var arr1 = [1,2,3,4,5];
var arr2 = [4,5,6,7,8];
var result1 = filter(arr1, arr2);
var result2 = filter(arr2, arr1);
var result = result1.concat(result2);