2019-06-27
描述
基于提供的对比函数,从右边开始依次返回数组中所有的唯一值。
提示
- 使用
Array.prototype.reduceRight()
和Array.prototype.some()
来获取数组中每一个值经过对比函数比对后仅包含唯一的元素 - 对比函数接受两个参数:被对比的两个元素的值
代码
const uniqueElementsByRight = (arr, fn) =>
arr.reduceRight((acc, v) => {
if (!acc.some(x => fn(v, x))) acc.push(v);
return acc;
}, []);
示例
从右边开始依次返回数组中 id 唯一的元素:
uniqueElementsByRight(
[
{ 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: 'e' }, { id: 1, value: 'd' }, { id: 2, value: 'c' } ]