javascript - 将排序转换为唯一排序

标签 javascript algorithm sorting caching

我正在尝试将这种排序转换为一种独特的排序:
const sort = arr => arr.sort((a, b) => a - b);

我尝试过这个:

const uniqSort = arr => {
    const breadcrumbs = {};
    for(let i =0; i<arr.length; i++){ 
        if(breadcrumbs[arr[i]]){ 
            arr.splice(i,1)
        } else { 
            breadcrumbs[arr[i]] = true;
        }
    }
    return arr.sort((a, b) => a - b);
};

由于某种原因它无法正常工作,有人知道为什么吗?

当我输入uniqSort([4,2,2,3,2,2,2]);
输出是[2,2,3,4]而不是[2,3,4]

最佳答案

您在迭代时修改的是同一个数组。

const uniqSort = arr => {
  const breadcrumbs = {};
  const newArray = [];
  for (let i = 0; i < arr.length; i++) {
    if (!breadcrumbs[arr[i]]) {
       breadcrumbs[arr[i]] = true;
       newArray.push(arr[i]);
    }
  }
  return newArray.sort((a, b) => a - b);
};

如果您正在寻找快速解决方案,如何从数组中过滤重复项,您可以将其转换为 Set,然后再转换回数组。

const uniqSort = arr => {
  return Array.from(new Set(arr)).sort((a, b) => a - b);
};

关于javascript - 将排序转换为唯一排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64547198/

相关文章:

javascript - 正则表达式在替换函数中使用变量无需重复

algorithm - 您如何解决具有给定内存限制的给定场景?

algorithm - 使用 O(n^2) 时间来修复二分匹配中的错误

c# - 创建我的第一个算法

HTML/CSS 列表列排序

javascript - anchor 链接滚动动画仅在 Squarespace 上刷新 (JQuery) 后才起作用

javascript - 将 Angular 添加到现有的 CodeIgniter 项目

javascript - Await 是 Promise 中的保留字

c - 对文件 C 中的行进行排序

javascript - knockout.js 不对可观察数组进行排序