计算两个数组中重叠项的数量

时间:2017-05-17 21:37:24

标签: javascript

我有两个数组,其Remove应从List中删除,并且应删除已删除的数字。

我正在使用此功能删除'Remove'中的内容:

  let output=this.List.filter((el)=>{
    return this.Remove.indexOf(el) <0;
  })

这工作正常,但我想计算重叠的项目数,因此已在过滤器中删除。

例如,如果List=['1','2','3','4','5']Remove=['1','4'],则count2

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以在reduce次运行中执行此操作。例如,您可以创建一个对象并跟踪已清除的数组和一些已删除的元素:

&#13;
&#13;
const a = [1,2,3,4,5,6,7];
const b = [1,4,9]; // elements to remove

const c = a.reduce((acc, cur) => b.includes(cur) 
  ? Object.assign(acc, {n: acc.n + 1}) 
  : Object.assign(acc, {res: acc.res.concat(cur)}), { n: 0, res: []});
  
console.log(c)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果您不想按照评论中的建议比较长度(这很好......),我可以使用计数器为您提出以下解决方案:

let list = ['1', '2', '3', '4', '5'],
    remove = ['1', '4'],
    overlap = 0;

let output = list.filter(el => {
  let bool = remove.indexOf(el) < 0;
  if (!bool) overlap++;
  return bool;
});

console.log(overlap);