给定两个数组,返回一个仅由不相交项组成的数组
Given two Arrays, return an Array consisting only of the non-intersecting items
我在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);
相关文章:
- 如何使用 node.js 比较两个 json 数组
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 访问$.ajax()函数中的两个不同数组
- 正在更新mongod中两个对象内部的数组
- 如何使用javascript合并两个对象数组
- 比较包含多个值对的两个JavaScript数组
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 检查来自不同数组的两个元素的一个属性是否相等
- 如何在javascript中合并两个对象数组
- 如何获取数组第一个元素的范围
- 捕获一组两个特殊字符之间的所有内容,但允许角色在正文中出现一次
- 使用具有不同属性数的两个或多个着色器时发生冲突
- JSON数组-多个有效答案的可能性
- 编写一个函数,将数组(第一个参数)拆分为大小(第二个参数)的长度组,并将它们作为多维数组返回
- 如何添加值到javascript数组两次或更多
- 使用.shift()更新数组'5个元素
- JavaScript 过滤器数组多个条件
- 如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回true
- Javascript序列化数组多个表单问题
- 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回