js去重的两种方法
去重
去重方法和思路也很多,这里就介绍两种吧。
方法一:
|
1
2
3
4
5
6
7
8
9
10
11
|
function unique1(arr) { var res = [], len = arr.length; for (var i = 0; i < len; i++) { if (res.indexOf(arr[i]) == -1) { res.push(arr[i]); } } return res;} |
思路:利用了数组的indexOf()方法,此方法的目的是寻找存入参数在数组中第一次出现的位置,如果结果返回-1,说明还不存在,于是就可以保存起来了。实现这个方法的时候会遍历数组直到找到目标为止,比较耗时,速度方面要比借助hash表来实现慢。下文即将介绍~
方法二:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
function unique2(arr) { var res = [], hash = {}, len = arr.length; for (var i = 0; i < len; i++) { if (!hash[arr[i]]) {//如果不存在 hash[arr[i]] = true;//记录下来 res.push(arr[i]);//保存起来 } } return res;} |
思路:将数组中的值通过作为下标(key)的形式存入一个Object内,利用这个加以判断,最后达到去重目的。这里有必再写详细一点,因为最初的时候有点懵逼,一时没看懂,定义了一个对象hash={},然后判断的时候又是这样写hash[],让人感觉又有点像数组。。。其实很好理解的。先来看个小例子:
|
1
2
3
4
5
6
7
8
9
10
|
var hash = { "name": "xiaojiecong", "sex": "male"};console.log(hash.name);console.log(hash.sex);console.log(hash["name"]);console.log(hash["sex"]); |
其实想说明就是,有两种方式能得到对象字面量中的某个键名(key)的键值(value),第一种是用点连接,第二种是用中括号,所以看到上面hash[]这样写也不会觉得奇怪了。用点连接或中括号,这个也适用于元素操作属性这种场景,比如:
|
1
2
3
4
|
document.getElementsByTagName('div')[0].style.display = 'block';document.getElementsByTagName('div')[0].style['display'] = 'block';document.getElementsByTagName('input')[0].value ='123';document.getElementsByTagName('input')[0]['value'] ='123'; |
这里解释太多,好像有点啰嗦了 - -!
js去重的两种方法的更多相关文章
- 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)
1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...
- JS去重的几种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python:列表的去重:两种方法的问题是:结果是没有保持原来的顺序。
列表的去重 1.使用set的特型,python的set和其他语言类似, 是一个无序不重复元素集 orgList = [1,0,3,7,7,5] #list()方法是把字符串str或元组转成数组 for ...
- js打印的两种方法
第一种: <!--startprint1-->……打印的内容放在这里…… <!--endprint1--> //打印 function preview(DivID) { ) { ...
- JS局部打印两种方法
所有浏览器都可以 <html> <head title=""> <title>测试打印</title> <style medi ...
- js数组创建两种方法
一.数组直接量形式创建数组 var arr=[];//空数组 ,,,,,]; ,,,],{x:,y:}]; ; ,x+,x+]; console.log(arr3); //[1,3,3,4] ,,]; ...
- MyEclipse取消验证Js的两种方法
MyEclipse取消验证Js的两种方法 作者: 字体:[增加 减小] 类型:转载 通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有两种解决方法,大家可以尝试下 前言:有时我们通过j ...
- 获取网页URL地址及参数等的两种方法(js和C#)
转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...
- js中数组去重的几种方法
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
随机推荐
- CCF(公共钥匙盒):思维+模拟
公共钥匙盒 201709-2 这题的思路一开始不是很清晰,一开始想用贪心去做.但是发现按照题目的思路不对.所以这里采用的是类似于多项式的加减的处理. #include<iostream> ...
- java校招笔试题
基础: Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)? 谈谈对 Java 注解的理解,解决了什么问题? 内部类了解吗?匿名内部类了解吗? BIO和NIO区别,4核cpu,1 ...
- Flink的日志配置
------------恢复内容开始------------ 介绍flink在本地运行和on yarn运行时的日志配置. 很多现代框架都是用门面模式进行日志输出,例如使用Slf4j中的接口输出日志,具 ...
- 2020年12月-第02阶段-前端基础-CSS Day02
CSS Day02 复合选择器 后代选择器 并集选择器 1. CSS复合选择器 理解 理解css复合选择器分别的应用场景 为什么要学习css复合选择器 CSS选择器分为 基础选择器 和 复合选择器 , ...
- Python 第三方登录 实现QQ 微信 微博 登录
本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...
- git分支管理--rebase&merge详解
目录 分支合并 git merge --squash [分支名] 注意点 git rebase [分支名] git rebase git rebase --abort git rebase -i gi ...
- 二叉树的建立与遍历(c语言)入门
树其实在本质上就是一对多,链表就是一对一. 二叉树的建立: 这里的代码采用的是最粗暴的创建方法,无实际用处.但初次学习二叉树可以通过这个创建方法更好的理解二叉树. 二叉树的遍历: 遍历在大体上分为递归 ...
- 实验四 Python综合实践
课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...
- JAVA使用SizeOf
研究一下JAVA的SizeOf 引用外部类实现JAVA的SizeOf JAVA本身是没有SizeOf的,因此我们需要去MavenRepository中下载JAR包(也可以使用maven等),因为这里只 ...
- 全面了解Vue3的 reactive 和相关函数
Vue3的 reactive 怎么用,原理是什么,官网上和reactive相关的那些函数又都是做什么用处的?这里会一一解答. ES6的Proxy Proxy 是 ES6 提供的一个可以拦截对象基础操作 ...