2019-06-26
描述
基于提供的对比函数,返回数组中所有的唯一值。
提示
- 使用
Array.prototype.reduce()
和Array.prototype.some()
来获取数组中每一个值经过对比函数比对后仅包含唯一的元素 - 对比函数接受两个参数:被对比的两个元素的值
代码
const uniqueElementsBy = (arr, fn) =>
arr.reduce((acc, v) => {
if (!acc.some(x => fn(v, x))) acc.push(v);
return acc;
}, []);
示例
返回数组中 id 唯一元素:
uniqueElementsBy(
[
{ id: 0, value: 'a' },
{ id: 1, value: 'b' },
{ id: 2, value: 'c' },
{ id: 1, value: 'd' },
{ id: 0, value: 'e' }
],
(a, b) => a.id == b.id
); // [ { id: 0, value: 'a' }, { id: 1, value: 'b' }, { id: 2, value: 'c' } ]