数组去重(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]。

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

相关推荐
鹏多多4 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
Coder_Boy_4 分钟前
Spring Boot 事务回滚异常 UnexpectedRollbackException 详解(常见问题集合)
java·spring boot·后端
青云交6 分钟前
Java 大视界 -- 基于 Java+Redis Cluster 构建分布式缓存系统:实战与一致性保障(444)
java·redis·缓存·缓存穿透·分布式缓存·一致性保障·java+redis clus
哈__7 分钟前
React Native 鸿蒙跨平台开发:Vibration 实现鸿蒙端设备的震动反馈
javascript·react native·react.js
不知疲倦的仄仄7 分钟前
第五天:深度解密 Netty ByteBuf:高性能 IO 的基石
java·开源·github
WebGISer_白茶乌龙桃9 分钟前
Cesium实现“悬浮岛”式,三维立体的行政区划
javascript·vue.js·3d·web3·html5·webgl
xiaobaishuoAI10 分钟前
后端工程化实战指南:从规范到自动化,打造高效协作体系
java·大数据·运维·人工智能·maven·devops·geo
小Tomkk12 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
期待のcode12 分钟前
TransactionManager
java·开发语言·spring boot
Hello.Reader14 分钟前
PyFlink JAR、Python 包、requirements、虚拟环境、模型文件,远程集群怎么一次搞定?
java·python·jar