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

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

相关推荐
杨超越luckly4 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
撩得Android一次心动4 小时前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
组合缺一4 小时前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
MSTcheng.5 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
一 乐5 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii5 小时前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
80530单词突击赢5 小时前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
vx1_Biye_Design5 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design5 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hedley(●'◡'●)5 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机