面试题之(数组去重)
2018-06-24 00:09:58来源:未知 阅读 ()
面试题:数组去重复的方法。(此题考查的概率极大)
方法1:简单粗暴的ES6方法Set,Set数据结构,它类似于数组,其成员的值都是唯一的。
var arr = [1, 2, 3, 2, 1, 3]; console.log(new Set(arr))//打印结果:Set(3) {1, 2, 3}
方法2:使用filter过滤函数去重。
var arr = [1, 2, 3, 1, 2, 3]; console.log(arr.filter((v, i, arr) => arr.indexOf(v) === i))//打印结果:(3) [1, 2, 3]
方法3:遍历数组法。
实现的思路:新建一个数组,遍历传入的数组,值不在新数组中就加入到该新数组;
注意:判断值是否在数组中可以用indexOf是ES5 方法,IE9以下不支持,需兼容低版本浏览器。
function unique(array) { var n = []; //一个新的临时数组 //遍历当前数组 for (var i = 0; i < array.length; i++) { if (n.indexOf(array[i]) == -1) n.push(array[i]); //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 } return n; } console.log(unique([1, 2, 3, 1, 2, 3])) //打印结果:(3) [1, 2, 3]
解决indexOf的兼容方法:
原生JS兼容:
if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (el) { for (var i = 0, n = this.length; i < n; i++) { if (this[i] === el) { return i; } } return -1; } }
用Jquery中inArray方法兼容:
if ($.inArray(randIndex, appearAnimals) == -1) {}
方法4:利用splice()方法直接在原数组进行操作。
双层循环,外层循环元素,内层循环时比较值。
值相同时,则删去这个值。
注意:删除元素之后,需要将数组的长度也减1。
优点:简单易懂。
缺点:占用内存高,速度慢。
Array.prototype.unique = function () { var arr = this, i, j, len = arr.length; for (i = 0; i < len; i++) { for (j = i + 1; j < len; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1); len--; j--; } } } return arr; }; var a = [1, 2, 3, 1, 2, 3]; var b = a.unique(); console.log(b); //打印结果:(3) [1, 2, 3]
方法5:利用对象的属性不能相同的特点进行去重
Array.prototype.unique = function () { var arr = this, i, obj = {}, result = [], len = arr.length; for (i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { //如果能查找到,证明数组元素重复了 obj[arr[i]] = 1; result.push(arr[i]); } } return result; }; var a = [1, 2, 3, 1, 2, 3]; var b = a.unique(); console.log(b); //打印结果:(3) [1, 2, 3]
方法6:数组递归去重
Array.prototype.unique = function () { var arr = this, len = arr.length; arr.sort(function (a, b) { //对数组进行排序才能方便比较 return a - b; }) function loop(index) { if (index >= 1) { if (arr[index] === arr[index - 1]) { arr.splice(index, 1); } loop(index - 1); //递归loop函数进行去重 } } loop(len - 1); return arr; }; var a = [1, 2, 3, 1, 2, 3]; var b = a.unique(); console.log(b); //打印结果:(3) [1, 2, 3]
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:js 函数节流
- JS简单去除数组中重复项的方法 2020-03-16
- 关于JS array的数组 2020-03-08
- javascript过滤数组重复元素的实现方法 2020-03-05
- jquery遍历筛选数组的几种方法和遍历解析json对象 2020-02-29
- javascript中怎样使用array数组 2020-02-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash