有一个字符串数组A和一个字符串数组B.我想删除A中不在B中的元素

时间:2016-06-06 10:42:53

标签: javascript arrays

我觉得我搞砸了,这是我的代码。

var flag;
for (i = 0; i < A.length; i++) 
{
  flag = 0;
  for (j = 0; j < B.length; j++) 
  {
    if (A[i].indexOf(B[j]) != -1) 
    {
      flag = 1;
    }
  }
  if (flag == 0) 
  {
    A.splice(i, 1);
  }
}

它根据我的需要提供输出 有人请帮帮我

4 个答案:

答案 0 :(得分:1)

我会做这样的工作;

//returns intersection of multiple arrays
Array.prototype.intersect = function(...a) {
  return [this,...a].reduce((p,c) => p.filter(e => c.includes(e)));
};
var a = [0,1,2,3,4,5],
    b = [4,5,6,7,8,9];
a = a.intersect(b);
console.log(a);

答案 1 :(得分:0)

您可以使用一个函数,该函数首先生成一个包含所有字符作为属性的对象,并将其作为哈希表来过滤array1

&#13;
&#13;
function deleteSome(array1, array2) {
    var o = Object.create(null);

    array2.forEach(function (a) {
        o[a] = true;
    });

    return array1.filter(function (a) {
        return this[a];
    }, o);
}


var a = 'abcdefgh'.split(''),
    b = 'banana'.split('');

console.log(deleteSome(a,b));
    
&#13;
&#13;
&#13;

答案 2 :(得分:0)

从技术上讲,阵列&#34; a&#34;应该只有数组中出现的元素&#34; b&#34;。

var a = [1,2,3,4];

var b = [4,5,6];

var new_a = [];

a.map(function(v,i,a){
    if(b.indexOf(v) !== -1){
        new_a.push(v);
    }
});

console.log(new_a); //[4]

答案 3 :(得分:0)

通过这种方式,我可以根据需要过滤尽可能多的数组。

var a = ['A', 'A', 'R', 'S', 'M', 'D',  'E']
var b = ['C', 'X', 'D', 'F']
//you can add as many arrays as you want
/*var c = ['O', 'P', 'D', 'Q']
var d = ['R', 'D', 'D', 'Z']*/
var arrays = [a,b, /*c , d */];


var result = arrays.shift().filter(function(v) {
  return arrays.every(function(a) {
      return a.indexOf(v) !== -1;
  });
});

console.log(JSON.stringify(result));