数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复。主要是理清思路和考虑下性能。以下方法,网上基本都有,这里只是简单地总结一下。
思路:
- 遍历数组,一一比较,比较到相同的就删除后面的
- 遍历数组,一一比较,比较到相同的,跳过前面重复的,不相同的放入新数组
- 任取一个数组元素放入新数组,遍历剩下的数组元素任取一个,与新数组的元素一一比较,如果有不同的,放入新数组。
- 遍历数组,取一个元素,作为对象的属性,判断属性是否存在
1. 删除后面重复的:
2 |
//var a1=((new Date).getTime()) |
3 |
for(var i=0;i<arr.length;i++) |
4 |
for(var j=i+1;j<arr.length;j++) |
5 |
if(arr[i]===arr[j]){arr.splice(j,1);j--;} |
6 |
//console.info((new Date).getTime()-a1) |
7 |
return arr.sort(function(a,b){return a-b}); |
2. 这个是常规的方法,比较好理解,如果相同则跳出循环
02 |
//var a1=((new Date).getTime()) |
03 |
var b = [], n = a.length, i, j; |
04 |
for (i = 0; i < n; i++) { |
05 |
for (j = i + 1; j < n; j++) |
06 |
if (a[i] === a[j]){j=false;break;} |
09 |
//console.info((new Date).getTime()-a1) |
10 |
return b.sort(function(a,b){return a-b}); |
3. 这个我花了好长时间明白的,这里j循环虽然继续了,但是i值已经改变了。就等于是一个新的i循环:
02 |
//var a1=((new Date).getTime()) |
03 |
var b = [], n = a.length, i, j; |
04 |
for (i = 0; i < n; i++) { |
05 |
for (j = i + 1; j < n; j++) |
06 |
if (a[i] === a[j])j=++i |
08 |
//console.info((new Date).getTime()-a1) |
09 |
return b.sort(function(a,b){return a-b}); |
4. 保证新数组中的都是唯一的
02 |
//var a1=((new Date).getTime()) |
04 |
for(var i=0;i<ar.length;i++){ |
06 |
for(var j=0;j<m.length;j++) |
07 |
if(ar[i]===m[j]){f=false;break;}; |
09 |
//console.info((new Date).getTime()-a1) |
10 |
return m.sort(function(a,b){return a-b}); |
5. 用对象属性
2 |
// var a1=(new Date).getTime() |
4 |
for (var i=0;(m= ar[i])!==undefined;i++) |
5 |
if (!o[m]){n.push(m);o[m]=true;} |
6 |
// console.info((new Date).getTime()-a1) |
7 |
return n.sort(function(a,b){return a-b});; |
- PHP 二维数组去掉重复值并保持原结构
PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...
- 字符串数组(String []) 去掉重复值的方法
public class Demo { /** * 去掉重复值 */ public static void main(String[] args) { String test = "100, ...
- JS去除数组中重复值的四种方法
JS去除数组中重复值的四种方法 1 /// <summary> o[this[i]] = ""; } } newArr.p ...
- PHP如何去掉多维数组的重复值
1.定义函数 function array_unique_new($arr){ $t = array_map('serialize', $arr);//利用serialize()方法将数组转换为以字符 ...
- JS数组去掉重复元素
JS数组去掉重复元素,这里提供3中写法. var arr =[1,2,3,4,5,6,3,4,7,2,4,1,8]; 输出:[1,2,3,4,5,6,7,8]; 1.使用indexOf() arr.i ...
- js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法
var questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...
- php 检查该数组有重复值
if (count($array) != count(array_unique($array))) { echo '该数组有重复值'; }
- JavaScript移除数组元素减少长度的方法
JavaScript移除数组元素减少长度的方法,代码如下: //数组移除长度方法 var array=[]; array[0]="张三"; array[1]="李四& ...
- php 获取数组第一个值的方法分享
以下是对使用php实现获取数组第一个值的方法进行了详细的分析介绍,需要的朋友可以过来参考下 reset (PHP 3, PHP 4, PHP 5)reset -- 将数组的内部指针指向第一个单元 说明 ...
随机推荐
- 3D Food Printing【3D食物打印】
3D Food Printing There's new frontier in 3D printing that's begining to come into focus: food. 3D打印的 ...
- Manacher(马拉车)学习笔记
Manacher可以有效的在\(O(n)\)时间内解决一个字符串的回文子串的题目 目录 简介 讲解 推介 简单的练习 恐怖的练习QAQ 小结 简介 开头都说了,Manacher是目前解决回文子串的最有 ...
- 如何在windows“我的电脑”中添加快捷文件夹
如图所示,windows中打开“我的电脑”时,原来有6个默认的文件夹,访问非常便捷,自己想再增加,可以使用“ThisPCTweaker”即可完成 操作如下图,不多解释,简单操作: 文件下载:http: ...
- 初步学习pg_control文件之十三
接前文,初步学习pg_control文件之十二 看这个: * backupStartPoint is the redo pointer of the backup start checkpoint, ...
- P1794 装备运输_NOI导刊2010提高(04)
P1794 装备运输_NOI导刊2010提高(04) 题目描述 德国放松对英国的进攻后,把矛头指向了东边——苏联.1943年初,东线的战斗进行到白热化阶段.据可靠情报,90余万德国军队在库尔斯克准备发 ...
- MQTT 开源代理mosquitto的网络层封装相当sucks
最近学习MQTT协议,选择了当前比较流行的MQTT Broker “mosquitto”,但是在阅读代码过程中发现其网络底层库封装的相当差劲. 对于MQTT协议的变长头长度的读取上,基本上采取每次一个 ...
- Eclipse+APKTool动态调试APK
1. 所需工具 Eclipse. Apktool v2.0.6. 安卓SDK工具. 2. 重编译APK apktool d -d -o test test.apk 此时当前test目录下就是apkto ...
- 「日常训练」Phone Numbers (CFR466D2C)
题意(Codeforces 940C) 给定一字符串,求比它字典序大的字符串.限定其长度,并且只能用原串的字母. 分析 考虑原串长度lorigin与给定的长度lgiven.若给定长度大于原串长度,直接 ...
- Windows下nginx作为静态资源服务器使用
一.Nginx下载与安装 1.nginx官方下载地址:http://nginx.org/ 2.下载完后将压缩包解压即可 3.nginx配置文件为根目录下conf\nginx.conf 二.Nginx常 ...
- JAVA虚拟机(一):内存区域
根据<java虚拟机规范第二版>规定,现阶段的java内存区域总体如下图 其中,方法区和堆是所有线程共享区域. 虚拟机栈,本地方法栈,程序计数器是各线程独占. 概述一下各个区域 先说说线程 ...