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

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

相关推荐
Csvn8 小时前
WASM
前端
天河归来8 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL9 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
修己xj9 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing039 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿10 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
砚底藏山河10 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
猿究院_夏燊10 小时前
MySQL 的四种隔离级别
java·数据库·mysql
码流子11 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
moshuying11 小时前
网购能买Token了!
前端