You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ES6实现uniqBy函数,寻求更简洁的代码实现方案

更简洁的uniqBy实现方案

嘿,我来分享几个更简洁且高效的uniqBy实现方式,既能减少代码行数,还能保持不错的可读性和性能~

方案一:结合filter与Map(推荐)

这个方案用filter直接生成结果数组,搭配Map快速判断元素是否已存在,代码简洁且性能和你原实现相当:

const uniqBy = (arr, fn) => {
  const map = new Map();
  return arr.filter(item => {
    const key = typeof fn === 'function' ? fn(item) : item[fn];
    return !map.has(key) && map.set(key, true);
  });
};

为什么这么写?

  • filter会自动帮我们筛选符合条件的元素,省去手动维护res数组的步骤
  • Map的has和set操作都是O(1)时间复杂度,和你原代码里的Set一样高效
  • 逻辑清晰,一眼就能看明白是在做去重判断

方案二:极致一行写法(可读性稍弱)

如果追求极致的代码长度,可以把逻辑压缩成一行,不过可读性会打折扣,适合对代码简洁度要求极高的场景:

const uniqBy = (arr, fn) => arr.filter((m => item => !m.has(typeof fn === 'function' ? fn(item) : item[fn]) && m.set(typeof fn === 'function' ? fn(item) : item[fn], true))(new Map()));

验证效果

用你给出的测试用例验证,结果和原代码完全一致:

console.log(uniqBy([2.1, 1.2, 2.3], Math.floor)); // [2.1, 1.2]
console.log(uniqBy([{x:1}, {x:2}, {x:1}], 'x')); // [{x:1}, {x:2}]

内容的提问来源于stack exchange,提问作者Vic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:12:52