我在JavaScript中遇到了问题。
我有两个数组,我想检查它们是否在某些元素上相交,然后删除这些元素并返回没有相交元素的新数组。
示例:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
我想检查一下并返回:
Array result (
[0] => 0 [1] => 2
)
我如何在JavaScript中执行此操作?
答案 0 :(得分:9)
结帐库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 :(得分:5)
使用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
答案 2 :(得分:2)
好吧,既然你指定了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);
它可能效率不高,但相对简洁。
答案 3 :(得分:0)
Plain 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);