数组去重(JavaScript)

前端面试题:给定一个数组[1,3,2,4,5,3,22,21,2],去重。
方法很多

  • for循环遍历

    • 双层for循环,存储到新的数组
    • 双层for循环,不声明新的数组,在原数组使用splice方法
  • 利用对象的属性唯一(有问题)
  • 先排序,然后将第n+1个与第n个比较去重
  • ES6语法,set()
  • 使用递归
  • 神操作
  • 一些轮子
  • 其他,比如包含了字符串,或者数组很大

for循环遍历

Array.prototype.distinct = function(){var arr = this,result = [],i,j,len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] === arr[j]){j = ++i;}}result.push(arr[i]);}return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();    //返回[3,4,2,1]
Array.prototype.distinct = 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,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

地址

利用对象的属性唯一(有问题)

function unique(arr){var res =[];var json = {};for(var i=0;i<arr.length;i++){if(!json[arr[i]]){res.push(arr[i]);json[arr[i]] = 1;}}return res;}

地址

先排序,然后将第n+1个与第n个比较去重

function unique(arr){var arr2 = arr.sort();var res = [arr2[0]];for(var i=1;i<arr2.length;i++){if(arr2[i] !== res[res.length-1]){res.push(arr2[i]);}}return res;}

地址

ES6语法,set()

贴一个来自尤雨溪的,网址

// ES6
function unique (arr) {const seen = new Map()return arr.filter((a) => !seen.has(a) && seen.set(a, 1))
}
// or
function unique (arr) {return Array.from(new Set(arr))
}作者:尤雨溪
链接:https://www.zhihu.com/question/29558082/answer/44854426
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

另一个简洁的

// ES6:一行关键代码
const uniqueItems = arr => [...new Set(arr)];// 测试
let arr = [4, 5, 4, 6, 3, 4, 5, 2, 23, 1, 4, 4, 4, 1, 2, 3, 45];
const uniqueItems = arr => [...new Set(arr)];
uniqueItems(arr);作者:庄引
链接:https://www.zhihu.com/question/29558082/answer/240560893
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
function uniteUnique() {const list=[].concat(...arguments);return list.reduce((oldlist,nowitem)=>oldlist.includes(nowitem)?oldlist:[...oldlist,nowitem],[]);
}作者:知乎用户
链接:https://www.zhihu.com/question/29558082/answer/237161293
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

神操作

  1. 如果使用underscore 或者 lodash的话应该可以使用_.uniq
  2. ES6的实现,网址
// 去除相邻相同的元素
let nub1By = fn => ([x,y,...xs]) => y === undefined ? (x===undefined?[]:[x]): fn(x,y) ? nub1By(fn)([y,...xs]): [x,...nub1By(fn)([y,...xs])]nub1By((a,b)=>a==b)([1,2,2,1,9,9,0])// 数组去重——去除前面
let uniqBy = fn => ([x,...xs]) => x === undefined ? []: xs.filter(a=>fn(a,x)).length !== 0 ? uniqBy(fn)(xs): [x,...uniqBy(fn)(xs)]uniqBy((a,b)=>a==b)([1,2,2,1,9,9,0])// 数组去重——去除后面
let uniq1By = fn => arr => uniqBy(fn)(arr.reverse()).reverse()uniq1By((a,b)=>a==b)([1,2,2,1,9,9,0])

一些轮子

jQuery: $.unique
underscore: _.unique

数组去重(JavaScript)先从网上整理一波,待验证相关推荐

  1. JavaScript中数组去重的几种方法整理

    本人菜鸡,前两天去面试,发现再次碰到数组去重这道面试题,比较常见.能够达到去重效果的方法有好几个,感觉有必要整理一下其中几种常见实现: 1,思路:创建一个空数组,然后循环需要去重的数组,对比创建的数组 ...

  2. JavaScript 数组去重方法合集(简洁易懂)

    JavaScript数组去重 JavaScript去重的七种方法 简单易懂 方法一:暴力去重法 // 暴力去重法 function ArrayIsUnique (array) {if (!Array. ...

  3. php数组去重并重新排序,php数组去重_php对数组中字符串去重并排序例子

    摘要 腾兴网为您分享:php对数组中字符串去重并排序例子,智慧大学,长沙银行,愈加,虚拟机等软件知识,以及掌盟,爱情测试打分,7150f打印机驱动,e洗车,报时闹钟,套图,音影风暴,连环夺宝,看门狗2 ...

  4. JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写.遍历.比较.排序等操作及算法改进相关实现技巧,需要的朋友可以参考下 测试用例: arr = ...

  5. php 数组去重_数组去重(JavaScript 为例)

    数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...

  6. java数组去重_再谈JavaScript数组去重

    JavaScript的数组去重是一个老生常谈的话题了.随便搜一搜就能找到非常多不同版本的解法. 细想一下,这样一个看似简单的需求,如果要做到完备,涉及的知识和需要注意的地方着实不少. 定义重复(相等) ...

  7. 使用JavaScript进行数组去重——一种高效的算法

    最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对 ...

  8. Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式

    [Java教程]JavaScript常见的五种数组去重的方式 0 2016-12-14 15:00:17 ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 ...

  9. 数组去重的JavaScript实现

    1.最简方法 创建一个空的新数组,依次检查旧数组的值是否存在于新数组中,如果不存在就push进去.主要用到数组的indexOf方法. function arrUnique(arr){var newAr ...

最新文章

  1. Android API中文系列总结
  2. asp.net(c#) linkbutton CommandArgument
  3. Windows各版本以及漏洞
  4. IDEA切换git分支
  5. python寻找屏幕上的特定字符_库Turtle:用Python指挥小海龟在屏幕上绘图,流行的儿童编程...
  6. npm查找全局安装包命令
  7. 两日公开课:伯克利深度强化学习训练营 | 视频+PPT
  8. DP4 最小花费爬楼梯
  9. 虚拟机中部署ISA Server 2006 防火墙 网络设置(上)
  10. svn服务端安装、迁移教程、Eclipse切换svn连接库
  11. RegSetValueEx 计算WCHAR字符长度 wcslen
  12. M5000 全谱直读光谱仪
  13. 自举电容充电回路分析
  14. CF379C-New Year Ratings Change
  15. PAT 甲级 1118 Birds in Forest (25 分)
  16. Web 面试之 HTTP和浏览器
  17. 100本最棒的web前端图书推荐
  18. rk键盘快捷键快捷键不一致_为什么其他键盘语言的键盘快捷键和可访问性很少起作用...
  19. Java小白学习二十八——冒泡排序
  20. eclipse/myeclipse下web项目部署时报没有webroot的错误

热门文章

  1. Linux环境搭建nginx负载
  2. Kubernetes容器云的互联网企业实践
  3. Exchange 常见问题之二----3
  4. 农历鸡年(丁酉)正月初一第一博
  5. 一条SQL语句查询数据库中的所有表、存储过程、触发器
  6. 对话框Dialog总结(转)
  7. J2SE理解之一:声明和访问控制
  8. EXCEL在公司管理中的典型应用
  9. 《小马哥Spring Cloud系列》十五:分布式应用追踪-视频笔记
  10. sp_executesql介绍和使用