博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几个数组去重的方法
阅读量:6300 次
发布时间:2019-06-22

本文共 1968 字,大约阅读时间需要 6 分钟。

最近经常面试前端岗位,发现大部分面试官非常愿意考察数组去重的知识,恰好又刷到了几个题,总结一下

题目要求:

  1. 给定数组去除重复元素,数组元素大多是Number, String类型
  2. 不能改变原有数组的顺序,去除元素之后保持原有顺序

(一)使用Array.prototype.includes()方法,判断数组中是否有这个元素

function uniteUnique( arr ) {	var newarr = [];	var uniqueArr = [];	// concat(返回一个spreading 的数组)	for (var i = 0; i < arguments.length; i++) {        // handle the argument object        // 不改变顺序的情况下合并为一个大数组;		newarr = newarr.concat(arguments[i]);	}    // 不改变顺序的情况下对数组去重    // 【重点】key:Array.prototype.includes()方法;	for (var j = 0; j < newarr.length; j++) {
          // 如果不包含这个元素,那么push到数组; if (!uniqueArr.includes(newarr[j])) { uniqueArr.push(newarr[j]); } } return uniqueArr;}console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]))

(二).使用filter(arrA, arrB)方法,同时使用arrA.indexOf(item)===-1来判断一个item是否在一个数组中,这种方法看起来十分巧妙,是对filter()用法非常熟悉的基础上灵活使用

function uniteUnique(arr1, arr2, arr3) {    var newArr;    // 把arguments 对象 转成数组,使用Array.prototype.slice.call(argument)    var args = Array.prototype.slice.apply(arguments);    newArr = args.reduce(function (arrA, arrB) {    //【重点】使用filter 方法移除数组中的重复元素    return arrA.concat(arrB.filter( function(i) {
       // 如果不包含,则返回true,否则返回false; return arrA.indexOf(i) === -1; })); }); return newArr; } // test hereconsole.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]));

(三)一种特别笨的方法,从学习C++开始就用这种方法,一直对这种方法执念很重,还没有JS函数式编程的思想,就是可以把一个匿名函数传来传去,当然也可能自己对C++一直半解,用不熟函数指针

  • 方法就是设置一个flag为true,假设小数组中的所有元素与当前大循环下的这个元素没有相同的。
  • 跑两遍循环,首先遍历大数组,不断把不重复的元素填到小数组里,如果有相同的,直接从小循环中跳出来,flag置false;
  • 如果小循环跑完了,flag依然为true,那么把大循环中的这个元素插入到小数组中
  • 循环跑完,结束
function uniteUnique1(arr1, arr2, arr3) {    var newArr;    var args = Array.prototype.slice.apply(arguments);    // 使用reduce方法拍平数组    newArr = args.reduce(function (arrA, arrB) {    // 使用filter 方法移除数组中的duplicate elements;        return arrA.concat(arrB);    });    【重点:丑陋地开始了】    var smallArr = [];    smallArr.push(newArr[0]);    for(var i=0; i

  

 

转载于:https://www.cnblogs.com/dejunwang/p/8313429.html

你可能感兴趣的文章
使用Swagger2构建强大的RESTful API文档(2)(二十三)
查看>>
Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
查看>>
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>
(轉貼) Eclipse + CDT + MinGW 安裝方法 (C/C++) (gcc) (g++) (OS) (Windows)
查看>>
还原数据库
查看>>
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>
mysql性能的检查和调优方法
查看>>
项目管理中的导向性
查看>>
Android WebView 学习
查看>>
(转)从给定的文本中,查找其中最长的重复子字符串的问题
查看>>
HDU 2159
查看>>
spring batch中用到的表
查看>>
资源文件夹res/raw和assets的使用
查看>>
UINode扩展
查看>>
LINUX常用命令
查看>>