面试题——4种数组去重的方法
数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。
废话不多说,下面来说说下面我整理的4中数组去重的方法
方法一: findInArr方法+select方法组合
findInArr : 查找一个数在当前数组中是否存在,存在返回true,找完所有没有找到,返回false,这个数就是我们要操作的那个数组
select :循环数组,并调用findInArr方法 查找当前arr[i]在arr2中是否存在,如果返回false 那么就把当前这个数 arr[i] ,push到新的数组 arr2中,最后return arr2
1 function findInArr(n ,arr){ 2 for (var i = 0; i < arr.length; i++) { 3 if (n == arr[i]) { 4 return true; 5 } 6 } 7 return false; 8 } 9 function select (arr){ 10 var arr2 = []; 11 for(var i = 0; i < arr.length; i++){ 12 if (!findInArr(arr[i],arr2)) { 13 arr2.push(arr[i]); 14 } 15 } 16 return arr2; 17 }
View Code
方法二 :利用json特性
创建一个空的json,通过对key的检索,---> !json[arr[i]],取反说明不存在
这样我们可以对其进行赋值,json[arr[i]] = true; 对于 赋什么值,随意,保证它的键值对就行
并且把当前这个数push 或者其他方式都行 ,总是添加到新数组 arr2中,最后return arr2
1 function select (arr){ 2 var json = {}; 3 var arr2 = []; 4 for (var i = 0; i < arr.length; i++) { 5 if (!json[arr[i]]) { 6 json[arr[i]] = true; 7 arr2.push(arr[i]) 8 } 9 } 10 return arr2; 11 }
View Code
方法三: 相邻数比较法,这个方法前提是先用sort 进行简单排序,不需要改进版的
经过sort排序之后,我们不论它排序是否正确,但是有一点我们能确定,那就是相同的一定被排到了一起
那么我们对排序之后的数组遍历,并且让当前的数和下一个数进行比较,如果相等那么用splice(i,1) 方法对其进行删除,这时候i的值需要 i--,避免它少比一次,最后return arr;
1 function select(arr){ 2 arr.sort(); 3 for (var i = 0; i < arr.length; i++) { 4 if (arr[i] == arr[i+1]) { 5 arr.splice(i,1) 6 i--; 7 } 8 } 9 return arr; 10 }
View Code
方法四:使用数组的indexOf方法 (IE8--不兼容)
通过判断arr2.indexOf(arr[i]) == -1 ,来确定新数组arr2中没有arr[i],并将其添加到数组arr2中,最终返回 arr2
1 function select (arr){ 2 var arr2 = []; 3 for( var i = 0; i < arr.length; i++){ 4 if (arr2.indexOf(arr[i]) == -1) { 5 arr2.push(arr[i]) 6 } 7 } 8 return arr2; 9 }
View Code
上述四中方法肯定存在的性能的差异,可以从速度上,所占内存等进行比较,我没有测过所以就不妄加定论。希望测过的朋友,能告知 。谢谢
转载于:https://www.cnblogs.com/NTWang/p/6246621.html
面试题——4种数组去重的方法相关推荐
- 超全的12种数组去重的方法
前言 数组去重,可以说是一个比较常见的面试题,今天来盘点一下都有哪些方法可以实现数组去重. 方法1.双重for循环 这是一个最笨的方法,双重循环. var arr = [1, 2, 3,4 ,5,6, ...
- 面试题----几种数组去重方式
数组去重的几种方法 1.使用数组方法indexOf来判断 IE8--不兼容 function sele(arr){var temp = [];for( var i = 0 ; i < arr.l ...
- C语言之容易想到的一种数组去重排序方法
直接上代码 #include<stdio.h> int main() {int a[1000]={0},cpy[1000]={0},flag,temp;int N,n,j,k,i,num= ...
- Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式
[Java教程]JavaScript常见的五种数组去重的方式 0 2016-12-14 15:00:17 ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 ...
- JS常见的几种数组去重方法
总结一下JS中用到的数组去重的方法 方法一: 该方法利用对象的属性值不能相同: function arrDelLikeElement (array) {const result = [];const ...
- 数组去重 php,PHP编程快速实现数组去重的方法详解
本文实例讲述了PHP编程快速实现数组去重的方法.分享给大家供大家参考,具体如下: 概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组.这个 ...
- 常用的js数组去重的方法
常用的js数组去重的方法 1. 使用for循环去重 2.使用set对象去重 3.使用数组索引indexOf()方法搭配for循环去重 4.使用includes()方法搭配for循环去重 5.使用fif ...
- js数组去重的方法:
js数组去重:项目中需求是选择一些数据,但是不能重复出现同样的数据,这里就要用到JS数组去重,以下几种数组去重方法简单实用哦! 方法一:利用数组的indexOf方法去重 需求: 利用indexOf判断 ...
- 【ES6】最简单的对象数组去重的方法
对象数组去重的方法 // arr传数组名,attr传属性名 const uniqueArr=(arr,attr)=> {const res = new Map();return arr.filt ...
最新文章
- python 抛出异常raise
- springboot整合mybatis记录
- STM32在定时器中控制步进电机
- android 模拟飞行,安卓版模拟飞行 X Plane 9试玩
- 黑马程序员-JavaSE核心知识-03第一个Java程序
- 浅谈MySQL的七种锁
- 传输层协议TCP和UDP的区别
- python分词统计词频_基于结巴分词做的全文分词统计词频小脚本
- Animate.css
- java 代码锁_Java 锁的知识总结及实例代码
- RabbitMQ的基本概念
- x264编码指南——码率控制
- 存储盟主将要退位云计算会是最后盟主?
- switch_case,,||,条件操作符和逗号操作符,循环语句
- Action以外的类中来获得Spring所管理的Service对象
- web文件服务器1台,WEB服务器及配件1台 - 千里马招标网
- windows无法格式化u盘_U盘无法打开提示格式化?4种方法快速拯救它
- Launcher folder、foldericon
- 计算机一级插入页码,计算机一级WPS考试:WPS文字中页码插入及排版技巧
- Python concurrent.futures 的 map 函数解释
热门文章
- 修改date格式 java_如何用Java更改日期格式?
- 操作系统--第一章 绪论(408计算机考研)
- 数据结构-栈之二进制转十进制和八进制
- 【目标分类_长尾分布问题】BBN:Bilateral-Branch Network _ CVPR2020
- 范数在机器学习中的作用_设计在机器学习中的作用
- 悟懂MapReduce,不纠结!
- 为什么有很多人认为“深圳是举全国之力发展起来的?
- 《北京作家》·史铁生·维格拉姆
- 网站搭建从零开始(四) 服务器的配置
- android 开启wifi失败,[求助]获取基站/wifi信息为空或失败