我在JavaScript中遇到了一个问题。给定两个数组,返回一个只包含非相交项的数组
我有两个数组,我想检查它们是否与某些元素相交,然后删除这些元素并返回没有相交元素的新数组。
例如:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
我要检查他们,并返回:
Array result (
[0] => 0 [1] => 2
)
我怎样才能做到这一点在JavaScript?
我在JavaScript中遇到了一个问题。给定两个数组,返回一个只包含非相交项的数组
我有两个数组,我想检查它们是否与某些元素相交,然后删除这些元素并返回没有相交元素的新数组。
例如:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
我要检查他们,并返回:
Array result (
[0] => 0 [1] => 2
)
我怎样才能做到这一点在JavaScript?
结帐库underscore.js。
说你有两个数组,
var a = [1, 2];
var b = [2, 3];
首先找到了工会。
var all = _.union(a, b);
然后找到交集。
var common = _.intersection(a, b);
最后的答案应该是工会和路口的区别。
var answer = _.difference(all, common)
+1 [Working example。](http://jsbin.com/ayujef/edit#javascript, live)可能安全地假设下划线代码是可接受的,因为jQuery显然已经被加载 – user113716
感谢您的工作示例 - 看起来不错:)下划线在哲学上类似于jQuery,尺寸也不是太大,但它所有都取决于OP的要求 – Anurag
好吧,既然你指定的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);
它可能不是很有效,但它是比较简洁。
thankx为响应,但我怎么能实现这一点,并返回一个数组没有相交的元素? –
更新了我的回答 – Blazemonger
使用Array.filter,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
感谢abstractdownvotefactor,数组存放在一个var中,并且不知道它是否索引这些元素。 –
没关系,我会编辑来证明这一点。 – Joe
这不会给你'array2'中不出现在'array1'中的元素。 OP的例子似乎表明所有独特的价值都保留下来。 – user113716
平原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);
你真的不应该在Array *上使用'for-in' *(在JavaScript中)*。 – user113716
我终于使用了下划线插件和@anurag的代码感谢你的帮助 –
@patrick dw :同意不应该在JavaScript中使用for-in,因为解析元素的顺序很重要,这是它唯一的缺点,我认为。 – mooglife
http://stackoverflow.com/questions/1885557/simplest-code-for- array-intersection-in-javascript – Gerry
thx对于响应,但是这个问题是关于返回一个带有相交元素的数组。我想删除它们,并将其余的返回给新的数组 –