javascript - 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]
解决方案
将数组减少为计数映射,以值作为键。将地图传播到条目。在 Map 的条目上使用Array.filter()
以删除所有条目,其值不等于arrayOfArrays
lenth。使用以下方法从条目中提取原始数字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]]));
推荐阅读
- html - 如何将页面中间的两个div与页眉和页脚水平和垂直对齐?
- scala - 将 Spark 数据框列的不同值转换为列表
- facebook - 从 facebook 获取电子邮件回复无法获取资源
- r - 使用传单进行多个弹出窗口
- javascript - jsx图中是否可以绘制复杂的函数图?
- javascript - 在 amcharts 中,有没有办法根据条件显示工具提示文本?
- gnuplot - 控制等值线的颜色,gnuplot 不幸总是从第一种颜色开始
- r - 具有选定列的长到宽数据框
- r - 使用 ETS 进行预测会产生意想不到的恒定值
- git - Git pre-receive hook newRev 问题