js jquery数组去重
数组去重建议直接使用jquery的 $.unique(arr);方法,此外比较好的方法是本文中的unique3方法比较快用了一个hash表,就是所谓的空间换时间。本文还提供了很多其他写法,都是大同小异.
- // $.unique(arr)推荐
var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];- document.write("jq-unique(): " + $.unique(arr) + "</br>"); // 1,a,2,b,3,c
- // 使用$.inArray(arr[i], new_arr),判断是否在新数组中
- var jqUnique3 = function(arr) {
- var new_arr = []; // 定义一个空数组,用来存放最后筛选出来的元素
- for(var i = 0; i < arr.length; i++) {
- if($.inArray(arr[i], new_arr) == -1) { // jQuery.inArray()函数用于在数组中搜索指定的值,并返回其索引值。如果数组中不存在该值,则返回 -1。
- new_arr.push(arr[i]); // 不存在则插入到new_arr的最后
- }
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("jq-unique3(): " + jqUnique3(arr) + "</br>"); // 1,a,2,b,3,c
- // 设置标志位
- Array.prototype.unique1 = function() {
- var new_arr = [this[0]]; // 构建一个新的数组存放结果
- for(var i = 1; i < this.length; i++) {
- var repeat = false;
- for(var j = 0; j < new_arr.length; j++) {
- if(this[i] == new_arr[j]) { // for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
- repeat = true;
- break;
- }
- }
- if(!repeat) {
- new_arr.push(this[i]); // 若结果数组中没有该元素,则存到结果数组中
- }
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("js-unique1(): " + arr.unique1() + "</br>"); // 1,a,2,b,3,c
- // 先排序再判断
- // 有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
- Array.prototype.unique2 = function() {
- this.sort(); // 先将原数组进行排序
- var new_arr = [this[0]];
- for(var i = 1; i < this.length; i++) {
- if(this[i] !== new_arr[new_arr.length - 1]) { // 检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
- new_arr.push(this[i]); // 如果不相同,则将该元素存入结果数组中
- }
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("js-unique2(): " + arr.unique2() + "</br>"); // 1,2,3,a,b,c
- // 使用Hash表,推荐
- Array.prototype.unique3 = function() {
- var new_arr = []; // 创建一个新的数组存放结果
- var json = {}; // 创建一个空对象
- for(var i = 0; i < this.length; i++) { // for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
- if(!json[this[i]]) {
- new_arr.push(this[i]);
- json[this[i]] = true;
- }
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("js-unique3(): " + arr.unique3() + "</br>"); // 1,a,2,b,3,c
- // indexOf 判断新数组中是否已存在
- Array.prototype.unique4 = function() {
- var new_arr = []; //一个新的临时数组
- for(var i = 0; i < this.length; i++) //遍历当前数组
- {
- //如果当前数组的第i已经保存进了临时数组,那么跳过,
- //否则把当前项push到临时数组里面
- if(new_arr.indexOf(this[i]) == -1) new_arr.push(this[i]);
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("js-unique4(): " + arr.unique4() + "</br>"); // 1,a,2,b,3,c
- // indexOf 判断当前数组的第i项在当前数组中第一次出现的位置是不是i
- Array.prototype.unique5 = function() {
- var new_arr = [this[0]]; //结果数组
- for(var i = 1; i < this.length; i++) //从第二项开始遍历
- {
- //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
- //那么表示第i项是重复的,忽略掉。否则存入结果数组
- if(this.indexOf(this[i]) == i) new_arr.push(this[i]);
- }
- return new_arr;
- }
- var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c'];
- document.write("js-unique5(): " + arr.unique5() + "</br>"); // 1,a,2,b,3,c
js jquery数组去重的更多相关文章
- js中数组去重的几种方法
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
- JS实现数组去重方法大总结
js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2&qu ...
- Js对于数组去重提高效率一些心得
最近在找工作,好几次面试都问过数组去重的问题.虽然问的都不一样,但是核心思想是没有变的. 第一种是比较常规的方法 思路: 构建一个新的数组存放结果 for循环中每次从原数组中取出一个元素,用这个元素循 ...
- js,jQuery数组常用操作小结
一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...
- js引用类型数组去重-对象标记法
前言 Js数组去重已经有很多种实现方式:包括逐个检索对比(使用Array.property.indexOf),先排序后对比,使用hash表,利用ES6中的Set()等.这些数组去重办法中速度最快的是h ...
- JS实现数组去重方法整理
前言 我们先来看下面的例子,当然来源与网络,地址<删除数组中多个不连续的数组元素的正确姿势> 我们现在将数组中所有的‘ a’ 元素删除: var arr = ['a', 'a', 'b', ...
- js06--利用js给数组去重
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- js中数组去重方法及性能对比
js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...
- js对数组去重的方法总结-(2019-1)
最近待业在家,系统地学习了一套js的课程.虽然工作时间真的比较长了,但有些东西只局限在知其然而不知其所以然的程度上,有些知识点通过“血和泪”的经验积累下来,也只是记了结果并没有深究,所以每次听完课都有 ...
随机推荐
- 03 测试Hadoop hdfs 上传 与 mr
1.随便在哪个目录新增一个文档.内容随便输入 mkdir words 2.在hdfs 中新建文件输入目录 ./hdfs dfs -mkdir /test 3.把新建的文档 (/home/hadoop/ ...
- [转帖]ODBC、OLEDB、ADO、ADO.NET
一文详解ODBC.OLEDB.ADO.ADO.NET之间的关系 2019年01月16日 21:28:38 LoveMIss-Y 阅读数:66更多 所属专栏: 白话C#高级编程 版权声明:本文为博主 ...
- switch-case和if-else可互换时
当switch-case和if-else可互换时,应当优先采用switch-case.因为switch-case的效率更高(详情下回分解).
- Prism框架中加载类库中时其中第三方类dll提示无法加载程序集
Prism框架是采用一种依赖注入的方式动态加载程序集,能够在程序需要加载的时候将程序集注入到里面去,实现程序的热插拔效果,而且采用这种框架能够让我们进行一个大项目的独立开发,在最近的一个项目中在独立开 ...
- Yii2的客户端验证
如何配置Yii的客户端验证呢? 首先,应该配置验证规则的场景,即scenario 其次,应该配置验证规则,在验证规则中配置客户端验证 例如:
- SpringBoot之通过yaml绑定注入数据
依赖包: <!--配置文件注解提示包--> <dependency> <groupId>org.springframework.boot</groupId&g ...
- Linux下4个查找命令which、whereis、locate、find的总结
(1)which [-a] cmdname1 cmdname2 ...... 作用:locate a command,从环境变量PATH中,定位/返回与指定名字相匹配的可执行文件所在的路径 ...
- xml模块 增删改查
import xml.etree.ElementTree as ET tree = ET.parse("xml test") #open root = tree.getroot() ...
- Hadoop Brief
Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. [1] Hadoop实现了一个分布 ...
- Web API 配置Help Page
当你创建一个web API,它通常用于创建一个帮助页面,以便其他开发人员知道如何调用你的API.你可以手动创建所有的文档,但最好是autogenerate尽可能多. 简化这个任务,ASP.Web AP ...