js中数组去除重复项目
js语法技巧:if(a>=5) alert(); 可以改写成下边语句: a>=5&&alert(); 在下文中会用到这种写法
// for循环删除后面重复的 速度最快,可用倒序计算可加快速度 var uniqueFor = function(arr) {
for (var i = 0; i < arr.length - 1; i++) {
var item = arr[i];
for(var j = i+1; j < arr.length; j++ ) {
item === arr[j] && (arr.splice(j, 1), j--);
}
};
return arr;
};
uniqueFor ([1,3,5,5,4,5,6,7,8,2,3])
这个方法效率最高,执行结果是先删除前边的,可以改下方法体倒序查询,就可以从后边开始删除了,请感兴趣的读者自己动手实验
//判断对象属性 var uniqueObject = function(arr) {
var v, r = [], o = {};
for(var i = 0; (v = arr[i]) !== undefined; i++) {
//v取出数组中的一个元素
//如果o的元素中不包含v属性, 则将元素存储到 r中,并设置o[]=true
!o[v] && (r.push(v), o[v] = true);
}
return r;
};
uniqueObject([1,3,5,5,4,5,6,7,8,2,3])
这个方法是通过将数组项目设置为o的属性后,查找属性中是否存在来进行筛选删除的,删除的是数组中靠后的重复项的,改下循环顺序可以删除靠前便的,不过最后还要颠倒一下数组
//数组过滤重复项filter var uniqueFilter = function(arr) {
return arr.filter(function(elem, pos, self) {
// 如果没有重复项,返回true,返回false的是有对应的elem会被删除
return self.indexOf(elem, pos + 1) === -1;
});
};
uniqueFilter ([1,3,5,5,4,5,6,7,8,2,3])
这个方法是从前边的重复项开始删除的。如果要从后边开始删除,那么删除前线颠倒一下数组吧,删除完毕后再次颠倒回来。
上文中的代码块可以直接复制粘贴到chrome控制台执行查看结果
补充知识点:
array1.filter(callbackfn[, thisArg]) 如果 callbackfn 参数不是函数对象,则将引发 TypeError 异常
参数 |
定义 |
---|---|
array1 |
必需。一个数组对象。 |
callbackfn |
必需。一个接受最多三个参数的函数。对于数组中的每个元素,filter 方法都会调用 callbackfn 函数一次。 |
thisArg |
可选。可在 callbackfn 函数中为其引用 this 关键字的对象。如果省略 thisArg,则 undefined 将用作 this 值。 |
内容来自MSDN https://msdn.microsoft.com/library/ff679973%28v=vs.94%29.aspx?f=255&MSPPError=-2147217396
当回调函数返回false时候,对应的项目会被删除
js中数组去除重复项目的更多相关文章
- JS中数组去除重复
法一:返回新数组每个位子类型没变 function outRepeat(a){ var hash=[],arr=[]; for (var i = 0; i < a.length; i++) { ...
- JS中数组去除重复的方法
function unique(arr) { var result = [], hash = []; for (var i = 0, elem; (elem = arr[i]) != null; i+ ...
- js 两数组去除重复数值
//两数组去除重复数值 mergeArray: function(arr1, arr2) { for (var i = 0; i < arr1.length; i++) { for (var j ...
- JavaScript中数组去除重复
方式一:常规模式 1.构建一个新的临时数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与临时数组对比 3.若临时数组中没有该元素,则存到临时数组中 //方式一: Array.p ...
- js中数组扁平化处理
- js中数组去重的几种方法
js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ...
- JavaScript -- 时光流逝(二):js中数组的方法
JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...
- ARCGIS中怎么去除重复的面?(转)
ARCGIS中怎么去除重复的面? https://blog.csdn.net/gswwldp/article/details/66974522 第一种: 1.用polygon to line将面转 ...
- php和js中数组的总结
php中数组的表示方法:array()或者[] js中数组的表示方法:new array()或者[] 一.php中初始化命名数组 在PHP中声明数组的方式主要有两种:一是应用array()函数声明 ...
随机推荐
- linux基本知识
1.默认不写端口号就是80端口 127.0.0.1.localhost都代表本机 2.linux下的用户管理: id:可以查看当前用户whoami:查看当前的用户who:看当前已经登录的用户w:也 ...
- JS和ASP.net相互调用问题
项目开发时,我们有时候会遇到后台asp调用前台的JS函数,又或者前台JS需要调用后台aspx.cs的函数,这里记录下如何处理这些问题 1. ASP后台代码中,如果需要运行JS函数,则使用Regist ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 运行nltk示例 Resource u'tokenizers punkt english.pickle' not found解决
nltk安装完毕后,编写如下示例程序并运行,报Resource u'tokenizers/punkt/english.pickle' not found错误 import nltk sentence ...
- 禁止chrome记住密码
谷歌浏览器保存密码后输入框背景色变成黄色,会影响原来的输入框样式,css样式input:-webkit-autofill可以改变输入框样式,background-color,background-im ...
- (转)浅谈Java中的对象和对象引用
原文地址: http://www.cnblogs.com/dolphin0520/p/3592498.html 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很 ...
- USACO . Friday the Thirteenth
Friday the Thirteenth Is Friday the 13th really an unusual event? That is, does the 13th of the mont ...
- [No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键
捕获控制台(console)关闭事件: 1.Ctrl+C信号: 2.Ctrl+Break信号: 3.用户系统关闭Console时: 4.用户退出系统时: 5.系统将要关闭时: using System ...
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...
- poj 2352 Stars 数星星 详解
题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...