我发现很多帖子可以解决这个问题:
假设我们有:
array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];
是否有一种经过验证的快速解决方案可以将两个数组相互比较,返回一个数组而不会在两个数组中出现这些值(此处为C和E)。期望的解决方案:
array3 = ['A', 'B', 'D']
但如果你有:
array1 = ['A', 'B', 'C', 'D', 'D', 'E']; array2 = ['D', 'E'];
你正在寻找解决方案:
array3 = ['A', 'B', 'C', 'D'] // don't wipe out both D's
以下是一些背景信息:
您正在尝试教授学生句子如何运作。你给他们一个混乱的句子:
ate - cat - mouse - the -
他们开始输入答案:猫
您希望提示现在阅读:
吃 - 鼠标 -
目前,我的代码取出了两个。
这是我尝试过的:
(zsentence是xsentence的副本,将被下面的代码操纵,join()ed并放到屏幕上)
for (i=0; i < answer_split.length; i++) {
for (j=0; j < xsentence.length; j++) {
(function(){
if (answer_split[i] == xsentence[j]) { zsentence.splice(j,1); return; }
})();
}
}
答案 0 :(得分:14)
只需遍历要删除的元素数组。
var array1 = ['A', 'B', 'C', 'D', 'D', 'E'];
var array2 = ['D', 'E'];
var index;
for (var i=0; i<array2.length; i++) {
index = array1.indexOf(array2[i]);
if (index > -1) {
array1.splice(index, 1);
}
}
它是O(array1.length * array2.length)
但是对于相当小的阵列和现代硬件,这不应该远程导致问题。
http://jsfiddle.net/mattball/puz7q/
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice
答案 1 :(得分:3)
您也可以使用过滤器。 请查看以下示例。
var item = [2,3,4,5];
var oldItems = [2,3,6,8,9];
oldItems = oldItems.filter(function(n){ return item.indexOf(n)>-1?false:n;});
所以这将返回[6,8,9]
如果您只想获得匹配的项目,那么您必须在下面编写代码。
oldItems = oldItems.filter(function(n){ return item.indexOf(n)>-1?n:false;});
这将仅返回[2,3]。