【发布时间】:2016-10-13 21:18:02
【问题描述】:
我有两个数组
a[] = [1,2,3,4]
b[] = [3,4]
需要从数组a中删除数组b的元素。
预期输出:
a[] = [1,4]
【问题讨论】:
-
你的意思是 b[] = [2,3] 吗?得到你所期望的 a[] = [1,4]。
标签: javascript arrays
我有两个数组
a[] = [1,2,3,4]
b[] = [3,4]
需要从数组a中删除数组b的元素。
预期输出:
a[] = [1,4]
【问题讨论】:
标签: javascript arrays
我会使用过滤方法:
a = a.filter(function (item) {
return b.indexOf(item) === -1;
});
【讨论】:
查看$.grep 和$.inArray 的jQuery 文档。
代码如下所示:
var first = [1,2,3,4],
second = [3,4];
var firstExcludeSecond = $.grep(first, function(ele, ix){ return $.inArray(ele, second) === -1; });
console.log(firstExcludeSecond);
基本上相当于遍历第一个数组 ($.grep) 并确定给定值是否在第二个数组 ($.inArray) 中。如果 $.inArray 返回的值为 -1,则第一个数组的值在第二个数组中不存在,因此我们抓取它。
【讨论】:
我正在循环第二个数组,并使用indexOf 检查值是否在第一个数组中,如果是,我使用splice 将其删除。
var a = [1,2,3,4,5];
var b = [3,4,5];
b.forEach(function(val){
var foundIndex = a.indexOf(val);
if(foundIndex != -1){
a.splice(foundIndex, 1);
}
});
或者
var a = [1,2,3,4,5];
var b = [3,4,5];
a = a.filter(x => b.indexOf(x) == -1);
对于 IE 8,
for(var i = 0; i < b.length; i++){
var val = b[i];
var foundIndex = a.indexOf(val);
if(foundIndex != -1){
a.splice(foundIndex, 1);
}
}
【讨论】:
const array_diff = (a, b) => a.filter(v => !b.includes(v))
如果你想支持IE
const array_diff = (a, b) => a.filter(v => b.indexOf(v) === -1);
【讨论】: