今天去面试,其他有这么一道题,给出一个js数组,然后把数组中重复的元素去掉。当时没怎么想到好方法,就直接用的循环套循环的方式做的,现在网上搜了一下,发现还有更好的方式,总共整理了四种:
function getArray(){ var arr = []; for(var i = 0; i < 10000; i++){ arr[i] = (Math.random() * 100); } console.log(arr); return arr; }; //此方法就是用的纯粹的循环套循环 function unique1(array) { var starttime = new Date().getUTCMilliseconds(); var newArray = []; var len = array == undefined ? 0 : array.length; for(var i = 0; i < len; i++) { var count = 0; for(var j = 0; j < newArray.length; j++) { if(newArray[j] == array[i]) { count++; break; } } if(count == 0){ newArray.push(array[i]); } } var endtime = new Date().getUTCMilliseconds(); console.log("1---------耗时-------"+(endtime-starttime)); return newArray; } //方法用的是hash表。把已经出现过的通过下标的形式存入一个object内。下标的引用要比用indexOf搜索数组快的多 function unique2(array) { var starttime = new Date().getUTCMilliseconds(); var newArray = []; var hash = {};//作为hash表 var len = array == undefined ? 0 : array.length; for(var i = 0; i < len; i++){ if(!hash[array[i]]){ newArray.push(array[i]); hash[array[i]] = true;//将数组元素已下标的形式存入hash表中 } } var endtime = new Date().getUTCMilliseconds(); console.log("2---------耗时-------"+(endtime-starttime)); return newArray; } //此方法的目的是利用indexOf寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 function unique3(array) { var starttime = new Date().getUTCMilliseconds(); var newArray = []; var len = array == undefined ? 0 : array.length; for(var i = 0; i < len; i++){ if(newArray.indexOf(array[i]) == -1){ newArray.push(array[i]); } } var endtime = new Date().getUTCMilliseconds(); console.log("3---------耗时-------"+(endtime-starttime)); return newArray; } //先排序,在相邻的两个元素比较,不同的话存入新数组,相同就不存 function unique4(array) { var starttime = new Date().getUTCMilliseconds(); var newArray = []; var len = array == undefined ? 0 : array.length; if(len > 0) { array.sort(); } newArray[0] = array[0]; for(var i = 1; i < len; i++){ if(array[i] != array[i-1]){ newArray.push(array[i]); } } var endtime = new Date().getUTCMilliseconds(); console.log("3---------耗时-------"+(endtime-starttime)); return newArray; } var array = getArray(); unique1(array); unique2(array); unique3(array); unique4(array);
自己测试中,总觉得第二种效率最高,不知道其他各位大神有什么好的见解。
相关推荐
对于JavaScript数组去重,有多种简单的方法。首先是使用ES6的Set对象,Set类似于数组,但不允许重复值: ```javascript let uniqueArray = [...new Set(array)]; ``` 这段代码首先创建一个Set,然后使用扩展运算符`...
JavaScript数组去重功能的设计与实现 ...本文详细介绍了JavaScript数组去重功能的设计与实现,提出了四种解决JavaScript数组去重问题的方法。这些方法可以有效地解决JavaScript数组去重问题,提高数据处理效率。
JavaScript Array数组去重源码下载
javascript 实现数组去重的多种方法_ javascript 实现数组去重的多种方法是指使用javascript 语言实现数组去重的多种方法。数组去重是指将数组中重复的元素删除,得到一个没有重复元素的新数组。下面将介绍多种实现...
数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看。 在真实的项目中碰到的数组去重,一般都是...
js对字符串(逗号隔开的)进行去重操作;js对json数组进行去重操作(指定某个属性),开发中经常遇到的前端小方法,简单实用
本文实例总结了JavaScript数组去重的方法。分享给大家供大家参考,具体如下: 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的...
文章内容介绍了六种不同的JavaScript数组去重方法,下面对这些方法的知识点进行详细说明。 方法一:双层循环去重 这种方法使用了双层循环来遍历数组元素,外层循环遍历数组的每一个元素,内层循环则用来检查当前...
在JavaScript中,数组去重是一个常见的需求,旨在从数组中删除重复的元素,仅保留唯一的元素。本文介绍了多种js数组去重的方法,并按照ES5和ES6的标准进行了区分。以下是对这些方法的知识点总结。 1. ES5 实现方法...
本项目“js代码-数组去重相加”旨在提供一种解决方案,以有效地处理包含重复元素的数组,并对其中的数值进行求和。下面我们将深入探讨这两个核心概念。 一、数组去重 在JavaScript中,数组去重有多种方法: 1. **...
在Vue中实现对象数组去重的一个常用方法是利用`Map`对象。`Map`对象会存储键值对,并且任何值(对象或原始值)都可以作为键或值,这就为我们的去重提供了便利。具体实现方式是通过遍历数组,以对象中某个特定属性...
数组去重是一个比较常见的算法考察点,实现去重的方式无非就是唯一性或者非唯一性,简而言之,就是选出唯一的或者去掉不唯一的,下面总结了几种方法。 方法一:利用双层for循环通过原数组去重,就是遍历数组,把数组...
js实现数组去重(5种方式,代码中有注释解释原理)
总结来说,JavaScript中数组去重有多种方法,每种方法都有其适用场景。在实际开发中,应根据数据量、性能需求以及是否需要保留原始顺序来选择合适的方法。在追求代码简洁性和执行效率之间找到平衡,是JavaScript...
这个代码可以帮你将数组中重复的元素筛选掉,不妨一试
js数组去重
实现方法比较简单,实现的方式也比较多,很多大牛也写过相关的文章,之所以写这边博客,旨在一是备忘,二是给初学者能更好的理解其实现的原理,好,我们看第一种实现方式: 第一种,通过遍历新数组来去重 var
在JavaScript编程中,数组去重是一项常见的操作,特别是在处理数据集合时。本篇文章将深入探讨如何...在"js数组去重-duplicateRemoval"的示例中,`duplicateRemoval.js`可能包含了上述方法之一的实现,供学习和参考。
对多维数组,对象,进行去重,相同的值只保留一个,常见的new Set()和filter,只能去重一维数组,并不能进行深层的去重,逻辑:判断是否为对象,为对象判断是否为数组或是真的对象,递归一直筛选为值,判断首次...