数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复。主要是理清思路和考虑下性能。以下方法,网上基本都有,这里只是简单地总结一下。
思路:
- 遍历数组,一一比较,比较到相同的就删除后面的
- 遍历数组,一一比较,比较到相同的,跳过前面重复的,不相同的放入新数组
- 任取一个数组元素放入新数组,遍历剩下的数组元素任取一个,与新数组的元素一一比较,如果有不同的,放入新数组。
- 遍历数组,取一个元素,作为对象的属性,判断属性是否存在
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 -- 将数组的内部指针指向第一个单元 说明 ...
随机推荐
- hadoop生态搭建(3节点)-01.基础配置
# 基础配置# ==================================================================node1 vi /etc/hostname nod ...
- 华为机试 求int型数据在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入 5 输出 2 普通运算方 ...
- Python3爬虫(十) 数据存储之非关系型数据库MongoDB
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.非关系型数据库NoSQL全程是Not Only SQL,非关系型数据库.NoSQL是基于键值对的,不需要经过S ...
- 【POJ】1008 Maya Calendar
参考:https://blog.csdn.net/u011392408/article/details/28866779 https://blog.csdn.net/qq_36424540/artic ...
- [BZOJ1455]罗马游戏(左偏树)
用并查集和左偏树维护士兵的关系 Code #include <cstdio> #include <algorithm> #define N 1000010 using name ...
- ActivityStream是什么?什么是Feed流?
我先说说feed流吧,它就是社交网站中用户活动信息流,例如用户写了博客.发了照片.评论了什么等等.Facebook叫newsFeed.推特叫TimeLineFeed.ActivityStream是这些 ...
- HTML布局的元素
header 定义文档或节的页眉 nav 定义导航链接的容器 section 定义文档中的节 article 定义独立的自包含文章 aside 定义内容之外的内容(比如侧栏) footer 定义文档或 ...
- Java开发WebService(使用Java-WS)
前言: 初学Java,因为工作需要,直接跳到开发WebService.以前用.NET开发过WebService,对比一下,Java的WebService开发部署难度高了不止一个档次.网上的教程各式各异 ...
- ThinkPHP5作业管理系统中处理学生未交作业与已交作业信息
在作业管理系统中,学生登陆到个人中心后可以通过左侧的菜单查看自己已经提交的作业和未提交作业.那么在系统中如何实现这些数据的查询的呢?首先我们需要弄清楚学生(Student).班级(class).作业提 ...
- java设计模式之观察者模式以及在java中作用
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...