数组去重(JS)

js 复制代码
输入: [1, 1, 1, 2, 2, 3, 3, 4, 5, 1];
输出: [1, 2, 3, 4, 5];

输入: [1, 1, 1];
输出: [1];
js 复制代码
function myUniq(arr) {
  // Create an empty object to keep track of unique elements
  const uniqueElements = {};

  // Iterate through the array and add elements to the object
  for (const element of arr) {
    uniqueElements[element] = true;
  }

  // Create a new array from the object's keys (which are the unique elements)
  const resultArray = Object.keys(uniqueElements).map(Number);

  return resultArray;
}

module.exports = myUniq;
  • 遍历与记录
js 复制代码
for (const element of arr) {
  uniqueElements[element] = true;
}

假设输入是 1, 2, 1

遇到第一个 1:对象变成 { "1": true }

遇到 2:对象变成 { "1": true, "2": true }

遇到第二个 1:对象依然是 { "1": true, "2": true }(重复的键被覆盖了)

  • 类型转换
js 复制代码
const resultArray = Object.keys(uniqueElements).map(Number);
  • Object.keys(uniqueElements): 这个方法会提取对象中所有的键名,返回一个字符串数组,
    例如 "1", "2"
  • .map(Number): 因为对象的键名永远是字符串,而题目要求处理的是数字数组,所以需要通过 .map(Number) 将字符串 "1", "2" 转回数字 1, 2

这种方法的逻辑是:"先把数字存成对象的标签(自动去重),再把标签撕下来转回数字。"

相关推荐
小鹿软件办公1 分钟前
倒计时开启:Chromium 宣布几周内将全面切断 MV2 扩展支持
开发语言·javascript·ublock origin
极客先躯2 分钟前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
_Aaron___6 分钟前
MyBatis 动态排序别乱用 ${}:ORDER BY 的安全写法
java·spring·mybatis
摇滚侠11 分钟前
SpringMVC 入门到实战 HttpMessageConverter 65-74
java·后端·spring·intellij-idea
逢君学术论文AI写作12 分钟前
Java第24课:会话技术CookieSession
java·开发语言
小小编程路14 分钟前
字符串转数字时,可能会遇到哪些问题?
java·开发语言·算法
许彰午19 分钟前
责任链模式实战——同一个框架里的两种链
java·开发语言·责任链模式
李白的天不白21 分钟前
Tree-Shaking
前端
寻道码路21 分钟前
LangChain4j Java AI 应用开发实战(十四):手写 RAG 全流程 - 深入理解每个环节
java·开发语言·人工智能·ai
云烟成雨TD26 分钟前
Agent Scope Java 2.x 系列【1】核心架构
java·人工智能·agent