2019-06-23
描述
对每一个数组中的所有元素都使用提供的函数进行计算,返回两个数组中存在的每一个元素,对计算相同的元素仅返回一次。
提示
- 对数组
a
中的所有元素运用fn
,并用计算后的结果创建一个Set
s - 对数组
b
进行过滤,过滤出经过fn
计算后结果不存在于 s 中的元素 - 使用扩展运算符将数组
a
和第二步中的结果转换为Set
- 将最终的
Set
使用Array.from
转换为数组并返回
代码
const unionBy = (a, b, fn) => {
const s = new Set(a.map(fn));
return Array.from(new Set([...a, ...b.filter(x => !s.has(fn(x)))]));
};
示例
两个数组中的元素下取整后,返回唯一结果的原始值:
unionBy([2.1], [1.2, 2.3], Math.floor); // [2.1, 1.2]