给定两个数组,返回一个仅包含非交叉项的数组

ske*_*boy 6 javascript jquery

我在JavaScript中遇到了问题.

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

例如:

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

Array B ( 
[0] => 2 [1] => 1 
)
Run Code Online (Sandbox Code Playgroud)

我想检查一下并返回:

 Array result ( 
[0] => 0 [1] => 2 
)
Run Code Online (Sandbox Code Playgroud)

我怎么能用JavaScript做到这一点?

Anu*_*rag 9

查看库underscore.js.

假设你有两个数组,

var a = [1, 2];
var b = [2, 3];
Run Code Online (Sandbox Code Playgroud)

首先找到工会.

var all = _.union(a, b);
Run Code Online (Sandbox Code Playgroud)

然后找到十字路口.

var common = _.intersection(a, b);
Run Code Online (Sandbox Code Playgroud)

最后的答案应该是联盟和交叉点之间的区别.

var answer = _.difference(all, common)
Run Code Online (Sandbox Code Playgroud)

  • +1 [工作示例.](http://jsbin.com/ayujef/edit#javascript,live)可能安全地假设下划线代码是可接受的,因为jQuery显然已经加载了. (2认同)

Joe*_*Joe 5

使用Array.filter,Array.lastIndexOfArray.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);
                   })
Run Code Online (Sandbox Code Playgroud)

默认情况下,这两种方法都不是100%跨浏览器,但两个链接都具有IE <= 8的安全填充程序