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()函数声明 ...
随机推荐
- 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET
先看效果 1.本文演示的是微信[企业号]的H5页面微信支付 2.本项目基于开源微信框架WeiXinMPSDK开发:https://github.com/JeffreySu/WeiXinMPSDK 感谢 ...
- Memcached初探
一.Memcached是什么 Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached基于 ...
- python列表模拟堆栈和队列
对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...
- C#基础---Queue(队列)的应用
Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不 ...
- 威佐夫博弈(Wythoff Game)
有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者. ...
- linux查看cpu 命令
总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep & ...
- [LeetCode] Basic Calculator 基本计算器
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- [LeetCode] Insert Interval 插入区间
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- [LeetCode] Palindrome Number 验证回文数字
Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...
- 编写轻量ajax组件01-对比webform平台上的各种实现方式
前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...