如何找到第二个数组中出现的公共数字?

时间:2017-11-15 05:31:20

标签: javascript

commonCount(ar1, ar2)

如果arr1 = [1,1,2,3,3]arr2 = [1,4,3,1,1],答案是3

我的思维过程:

  • 初始化累加器
  • 遍历arr1
  • 如果arr1 [i]在arr2中,则将1添加到累加器
  • 从arr2中删除arr1 [i](因为如果该号码已经存在,我们不想复制)
  • return accumulator

1)如何检查arr1 [i]是否在arr2中?

2)如何从arr2中删除arr1 [i]?

3 个答案:

答案 0 :(得分:4)

console.log([1,2,3,4,5].filter((n) => [1,1,2,10,11].includes(n)))

这是计算交集的代码。

过滤掉它们你会这样做

console.log([1,1,2,10,11].filter((n) => ![1,2,3,4,5].includes(n)))

要从数组x中删除元素arr,我们可以执行此操作

    var array = [1,2,3];
    var index = array.indexOf(3);
    if( index >= 0)
       array.splice(index,1);

删除元素也会回答有关如何检查数组中是否存在元素的问题。

答案 1 :(得分:0)

尝试使用arr2 .filter(val => !arr1.includes(val));删除second array

中的重复值



var arr1 = [1, 1, 2, 3, 3];
var arr2 = [1, 4, 3, 1, 1];
arr2 = arr2 .filter(val => !arr1.includes(val));

console.log(arr1);
console.log(arr2);




答案 2 :(得分:0)

您可以使用array#reduce将所有唯一值及其频率存储在对象中,然后使用array#filter查看唯一对象来过滤结果,并在找到相同值后递减频率。之后只需返回长度。



const arr1 = [1,1,2,3,3],
      arr2 = [1,4,3,1,1];

var commonCount = (ar1, ar2) => {
  const uniques = ar1.reduce((res, v) => {
    res[v] = (res[v] || 0) + 1;
    return res;
  },{});
  const common = arr2.filter(v => uniques[v] > 0 && uniques[v]--);
  return common.length;
}

console.log(commonCount(arr1,arr2));