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

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

相关推荐
雀啼春3 分钟前
Java中的数据类型
java
CHANG_THE_WORLD5 分钟前
PDF文档结构分析 一
前端·pdf
80530单词突击赢12 分钟前
C++关联容器深度解析:set/map全攻略
java·数据结构·算法
2601_9498333916 分钟前
flutter_for_openharmony口腔护理app实战+知识实现
android·javascript·flutter
兩尛19 分钟前
c++知识点1
java·开发语言·c++
东东51621 分钟前
果园预售系统的设计与实现spingboot+vue
前端·javascript·vue.js·spring boot·个人开发
舟舟亢亢21 分钟前
JVM复习笔记——下
java·jvm·笔记
rainbow688922 分钟前
Python学生管理系统:JSON持久化实战
java·前端·python
打小就很皮...26 分钟前
React Router 7 全局路由保护
前端·react.js·router