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

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

相关推荐
盛世宏博智慧档案几秒前
恒湿净化一体机联动开发:档案馆温湿度阈值判断与启停控制实践
java·后端·struts·恒湿机·加湿除湿消毒净化一体机
传人once6 分钟前
企业官网静态页基础结构如何搭
javascript·css
桔筐9 分钟前
Vue中DOM的data-*自定义属性(dataset)与Vue data响应式变量区别详解
前端·javascript·vue.js
damoluomu15 分钟前
静态站点生成器怎么选:Node.js 生态里常用的五个(番外一)
javascript·css·typescript·node.js·html
huaweichenai18 分钟前
spring boot实现base64上传
java·spring boot·后端
萧瑟余晖23 分钟前
Spring Web综合实战与性能调优详解
java·spring
点纭24 分钟前
spring ai1.0实战:ChatClient(2)
java·后端·spring
小马过河R28 分钟前
EdgeOne深度解析:从原理、适用场景到COS接入的技术逻辑
java·开发语言·前端·spring·cos
知守观29 分钟前
多模块工程没 install,跑起来的代码是上周的:Maven reactor 依赖解析踩坑
java·maven·intellij idea
ZoeLandia1 小时前
TypeScript 04:类型断言与类型守卫
开发语言·前端·typescript