从数组javascript中删除元素(相反的交集)

时间:2015-04-18 09:14:59

标签: javascript arrays

昨天我问了这个问题Delete elements from array javascript 但我误以为,我的解释和我的例子都是关于两个数组之间的交集 我想问的是如何删除阵列上不存在于其他阵列上的元素 示例

Array A=> [a, b, c, d]  
Array B=> [b, d, e]  
Array C= removeElementsNotIn(A, B);  
Array C (after function)-> [a,c]

非常感谢。

3 个答案:

答案 0 :(得分:5)

您可以使用.filter()有选择地删除未通过测试的项目。

var c = a.filter(function(item) { 
    return b.indexOf(item) < 0; // Returns true for items not found in b.
});

在一个功能中:

function removeElementsNotIn(a, b) {
    return a.filter(function(item) { 
       return b.indexOf(item) < 0; // Returns true for items not found in b.
    });
}
var arrayC = removeElementsNotIn(arrayA, arrayB);

如果你想获得真的花哨(仅限高级),你可以创建一个返回过滤功能的函数,如下所示:

function notIn(array) {
    return function(item) {
        return array.indexOf(item) < 0;
    };
}
// notIn(arrayB) returns the filter function.
var c = arrayA.filter(notIn(arrayB)); 

答案 1 :(得分:1)

感谢第二个Rikhdo 完整代码:

var a = [1,2,3,4,5];
var b = [4,5,6,7,8,9];

var new_array = a.filter(function(item) { 
  return b.indexOf(item) < 0; // Returns true for items not found in b.
});
alert(new_array);
// results: array[1,2,3]

演示:https://jsfiddle.net/cmoa7Lw7/

答案 2 :(得分:1)

&#13;
&#13;
a1 = ['s1', 's2', 's3', 's4', 's5'];
a2 = ['s4', 's5', 's6'];
a3 = [];

function theFunction(ar1, ar2) {
  var ar3 = [];
  for (var i = 0; i < a1.length; i++) {
    if (ar2.indexOf(ar1[i]) != -1) {
      ar3.push(ar1[i]);
    }
  }
  return ar3;
}

a3 = theFunction(a1, a2);

document.getElementById('out').innerHTML = a3.toString();
&#13;
<div id="out"></div>
&#13;
&#13;
&#13;