博客
关于我
JS数组去重的方法
阅读量:579 次
发布时间:2019-03-11

本文共 1952 字,大约阅读时间需要 6 分钟。

Below是优化后的内容:


利用 ES6 Set 去重

方法一:使用 Set 和 Array.from

같은值会被 Set自動去重,Array.from 可以将其轉換為陣列。

function unique(arr) {  return Array.from(new Set(arr));}

注意事項

  • Set 只能 accept Objects,轉换為集合時, Pale 難的 key 必须是 primitives(字符串或數值)。
  • 如果數值型的 key,Set 會自動進位。

方法二:遍历塔蝶-splice

先創建Pointer, 階驰遍歷,遇到重复值時刪除後面的元素。

function unique(arr) {  for (let i = 0; i < arr.length; i++) {    for (let j = i + 1; j < arr.length; j++) {      if (arr[i] === arr[j]) {        arr.splice(j, 1);        j--;      }    }  }  return arr;}

注意事項

  • splice 方法摘除元素,且 j 需要降低,否則索引會出錯。

利用 indexOf 去重

於 Penny ,建立新陣列,時間 complexity O(n²),但直觀易懂。

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('輸入錯誤');    return [];  }  const result = [];  for (let i = 0; i < arr.length; i++) {    if (result.indexOf(arr[i]) === -1) {      result.push(arr[i]);    }  }  return result;}

利用 sort()

排序並移動重复元素。

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('輸入錯誤');    return [];  }  const sorted = arr.slice().sort();  const result = [sorted[0]];  for (let i = 1; i < sorted.length; i++) {    if (sorted[i] !== sorted[i - 1]) {      result.push(sorted[i]);    }  }  return result;}

使用 includes 方法

直接檢查是否存在陣列已有元素, dahaเข็ง kop。

function unique(arr) {  if (!Array.isArray(arr)) {    console.log('輸入錯誤');    return [];  }  const result = [];  for (let item of arr) {    if (!result.includes(item)) {      result.push(item);    }  }  return result;}

使用 Map 去重

使用 Map 儿童儲存$arrayElem, unmap():

function unique(arr) {  const map = new Map();  const result = [];  for (let item of arr) {    if (!map.has(item)) {      map.set(item, true);      result.push(item);    }  }  return result;}

使用 filter

直接 filter 排除重复元素。

function unique(arr) {  return arr.filter((item, index, arr) => {    return arr.indexOf(item) === index;  });}

重點總結:

  • Set 創建了新集合,杜撰重複值。
  • splice 可能效率低,ray-hinge一些情況下基殆效果。
  • indexOf 是手動 implemented, cubic timing.
  • sort() 及 filter 都會 O(n log n) 时间 complexity。
  • Map 提供了更直接的方式儲存VISITOR 已經查看的元素。

转载地址:http://uuitz.baihongyu.com/

你可能感兴趣的文章
使用docker搭建nfs实现容器间共享文件 nfs server nfs client
查看>>
Failed to establish a new connection: [Errno -2] 未知的名称或服务‘
查看>>
CURL 发送请求详解
查看>>
python中的序列化
查看>>
django中使用celery执行异步任务实现
查看>>
区块链初步了解
查看>>
centos7安装telnet服务
查看>>
redis简单使用示例(附代码)
查看>>
centos7 安装 mongodb3.6.3
查看>>
什么是Linux内核?它有什么功能?
查看>>
机器学习前沿:Michael Jordan与鬲融、金驰、马腾宇等青年才俊的对话
查看>>
LIVE 预告 | 牛津胡庆拥:学习理解大规模点云
查看>>
java有道翻译
查看>>
无线通信模块种类和优点
查看>>