首页 > 解决方案 > JavaScript。如何比较输入数组

问题描述

我现在被这个问题困扰了3天......有人请帮助我。

挑战 5
构造一个函数intersection,比较输入数组并返回一个新数组,其中包含在所有输入中找到的元素。

function intersection(arrayOfArrays) {

}

console.log(intersection([[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]]));

// should log: [5, 15]

标签: javascriptarrayscompare

解决方案


将数组减少为计数映射,以值作为键。将地图传播条目。在 Map 的条目上使用Array.filter()以删除所有条目,其值不等于arrayOfArrayslenth。使用以下方法从条目中提取原始数字Array.map()

function intersection(arrayOfArrays) {
  return [...arrayOfArrays.reduce((r, s) => {
    s.forEach((n) => r.set(n, (r.get(n) || 0) + 1));
    
    return r;
  }, new Map())]
  .filter(([k, v]) => v === arrayOfArrays.length)
  .map(([k]) => k);
}

console.log(intersection([[5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]]));


推荐阅读