如何获得两个字符串数组的区别?

时间:2019-04-20 13:14:38

标签: javascript arrays string

我想得到两个字符串数组之间的确切区别。

const array1 = ['T','E','A','P','A','P','E','R'];
const array2 = ['T','A','P'];

预期的输出数组:

['E','A','P','E','R']

我尝试过这种方法:

const output = array1.filter(char => array2.includes(char));

但这会删除字符的所有实例,例如:

['E','E','R']

我是新手,所以您能指导我正确的方向吗?

3 个答案:

答案 0 :(得分:6)

您可以关闭第二个数组的索引,并增加索引并将其从结果集中删除。

var array1 = ['T', 'E', 'A', 'P', 'A', 'P', 'E', 'R'],
    array2 = ['T', 'A', 'P'],
    result = array1.filter((i => v => array2[i] !== v || !++i)(0));

console.log(result);

没有预定义顺序array2的另一种方法。

var array1 = ['T', 'E', 'A', 'P', 'A', 'P', 'E', 'R'],
    array2 = ['T', 'A', 'P'],
    set2 = new Set(array2)
    result = array1.filter(v => !set2.delete(v));

console.log(result);

答案 1 :(得分:1)

我认为过滤器在这里不正确。因为有些元素被废除了。使用简单的for循环。并将其添加到结果中时删除元素。

const array1 = ['T','E','A','P','A','P','E','R'];
const array2 = ['T','A','P'];
const copy = [...array2];

let res = [];
for(let i = 0;i<array1.length;i++){
  let index = copy.indexOf(array1[i]);
  if(index === -1){
    res.push(array1[i]);
  }
  else copy.splice(index,1);
  

}
console.log(res)

答案 2 :(得分:1)

您可以基于allowed数组从input中删除元素:

 const allowed = ['T','E','A','P','A','P','E','R'];
 const input = ['T','A','P'];

 for(const char of input) {
   const pos = allowed.indexOf(char);
   if(pos === -1) {
     // char doesnt exist?
   } else {
     allowed.splice(pos, 1);
   }
 }

然后allowed将是您预期的结果。