js数组去重的方法汇总
作者:hebedich 发布时间:2024-04-18 10:55:17
标签:js,数组去重
三种方法
利用indexOf判断新数组
underscore.js中实际上也是使用的类似的indexOf
//传入数组
function unique1(arr){
var tmpArr = [];
for(var i=0; i<arr.length; i++){
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if(tmpArr.indexOf(arr[i]) == -1){
tmpArr.push(arr[i]);
}
}
return tmpArr;
}
利用indexOf判断旧数组
function unique2(arr){
var tmpArr = []; //结果数组
for(var i=0; i<arr.length; i++){
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if(arr.indexOf(arr[i]) == i){
tmpArr.push(arr[i]);
}
}
return tmpArr;
}
利用hash查找
这里利用了JS对象的实现就是hash表的特性
function unique3(arr){
var tmpArr = [], hash = {};//hash为hash表
for(var i=0;i<arr.length;i++){
if(!hash[arr[i]]){//如果hash表中没有当前项
hash[arr[i]] = true;//存入hash表
tmpArr.push(arr[i]);//存入临时数组
}
}
return tmpArr;
}
数组扩展
Array.prototype.unique1 = function (){
var tmpArr = [];
for (var i = 0; i < this.length; i++){
if (tmpArr.indexOf(this[i]) == -1){
tmpArr.push(this[i]);
}
}
return tmpArr;
}
Array.prototype.unique2 = function(){
var tmpArr = []; //结果数组
for(var i = 0; i < this.length; i++){
if (this.indexOf(this[i]) == i){
tmpArr.push(this[i]);
}
}
return tmpArr;
}
Array.prototype.unique3 = function(){
var tmpArr=[], hash = {};
for(var i = 0; i < this.length; i++){
if (!hash[this[i]]){
hash[this[i]] = true;
tmpArr.push(this[i]);
}
}
return tmpArr;
}
使用Set
Set和Map是ES6中新增的数据结构
Set直接可以存储不重复的一组key,这个key也可以是对象,字符串等
创建set
var s = new Set([1, 2, 3,]);
s; // Set {1, 2, 3}
新增元素
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}//重复元素不会被添加
删除元素
s; // Set {1, 2, 3, 4}
s.delete(3);
s; // Set {1, 2, 4}
遍历元素
Map和Set无法使用下标
ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型
var s = new Set(['A', 'B', 'C']);
for (var x of s) { // 遍历Set
alert(x);
}
或者直接使用iterable内置的forEach方法
forEach方法是ES5.1标准引入的
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, set) {
alert(element);
});
以上所述就是本文的全部内容了,希望大家能够喜欢。


猜你喜欢
- Python中内置了list集合与tuple集合,在list集合中可以实现元素的添加、修改、插入、以及删除。tuple集合看似与list类似
- 编程是数据科学中不可或缺的技能,虽然创建脚本来执行基本功能很容易,但编写大规模可读性良好的代码需要更多的思考。关于PEP-8pycodest
- 方法一: import win32com.clientxl = win32com.client.Dispatch("Ex
- 前几篇都是手动录入或随机函数产生的数据。实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。比如之前python基础(12)
- 准备阶段我们需要安装pyautogui调用库(在命令提示符下安装pyautogui建议配置一个镜像源)pip install pyautog
- 前言因为自已平时会把一个常用到逻辑写成一个工具python脚本,像关于时间字符串处理,像关于路径和文件夹遍历什么的工具。每一次新建一个项目的
- fileno()方法返回所使用的底层实现,要求从操作系统I/O操作的整数文件描述符。语法以下是fileno()方法的语法:fil
- 前言记录CS2000设备使用串口连接以及相关控制。CS2000是一台分光辐射亮度计,也就是可以测量光源的亮度。详细的规格网址参考CS2000
- django中form表单设置action后,点提交按钮是跳转到action页面的,比如设置action为login,网址为192.168.
- 1 引言这段时间在研究美团爬虫,用的是scrapy-redis分布式爬虫框架,奈何scrapy-redis与scrapy框架不同,默认只发送
- json 模块Python 提供了内置的 json 模块来处理 JSON 格式的文件。该模块主要分为读取和写入 JSON 文件。读取 JSO
- 网络上关于各种语言和应用软件的速查手册和快速参考指南有很多很多,不幸的是当我们需要的时候,总是很难找到,所以我决定花点时间尽可能的收集更多的
- 在学习python的过程中,用来练习代码,并且复习数据结构的#coding:utf-8#author:Elvisclass Stack(ob
- 请按步骤进行,未进行前面的步骤时,请不要做后面的步骤,以免损坏你的数据库.一般不建议做第4,6两步,第4步不安全,有可能损坏数据库或丢失数据
- 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
- 在对float零值判断时往往只需要和0做==即可,所以曾经int和float都用==0来做对比,比如下方: in
- 一、前言写这篇文章的灵感来源于我玩游戏的时候(为了避免过不了审就不说是啥游戏了),看见一个大佬在游戏里面建造了“还原方阵
- 一、类的定义和使用python定义一个类的基本语法是:class classname([基类一,基类二...]): &
- INSERT INTO hk_test(username, passwd) VALUES('qmf1', 'qmf1
- 本文实例分析了Python星号*与**用法。分享给大家供大家参考,具体如下:1. 加了星号(*)的变量名会存放所有未命名的变量参数,不能存放