数组去重(JavaScript)先从网上整理一波,待验证
数组去重(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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
神操作
- 如果使用underscore 或者 lodash的话应该可以使用_.uniq
- 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)先从网上整理一波,待验证相关推荐
- JavaScript中数组去重的几种方法整理
本人菜鸡,前两天去面试,发现再次碰到数组去重这道面试题,比较常见.能够达到去重效果的方法有好几个,感觉有必要整理一下其中几种常见实现: 1,思路:创建一个空数组,然后循环需要去重的数组,对比创建的数组 ...
- JavaScript 数组去重方法合集(简洁易懂)
JavaScript数组去重 JavaScript去重的七种方法 简单易懂 方法一:暴力去重法 // 暴力去重法 function ArrayIsUnique (array) {if (!Array. ...
- php数组去重并重新排序,php数组去重_php对数组中字符串去重并排序例子
摘要 腾兴网为您分享:php对数组中字符串去重并排序例子,智慧大学,长沙银行,愈加,虚拟机等软件知识,以及掌盟,爱情测试打分,7150f打印机驱动,e洗车,报时闹钟,套图,音影风暴,连环夺宝,看门狗2 ...
- JavaScript数组去重算法实例
本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写.遍历.比较.排序等操作及算法改进相关实现技巧,需要的朋友可以参考下 测试用例: arr = ...
- php 数组去重_数组去重(JavaScript 为例)
数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...
- java数组去重_再谈JavaScript数组去重
JavaScript的数组去重是一个老生常谈的话题了.随便搜一搜就能找到非常多不同版本的解法. 细想一下,这样一个看似简单的需求,如果要做到完备,涉及的知识和需要注意的地方着实不少. 定义重复(相等) ...
- 使用JavaScript进行数组去重——一种高效的算法
最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对 ...
- Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式
[Java教程]JavaScript常见的五种数组去重的方式 0 2016-12-14 15:00:17 ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 ...
- 数组去重的JavaScript实现
1.最简方法 创建一个空的新数组,依次检查旧数组的值是否存在于新数组中,如果不存在就push进去.主要用到数组的indexOf方法. function arrUnique(arr){var newAr ...
最新文章
- Android API中文系列总结
- asp.net(c#) linkbutton CommandArgument
- Windows各版本以及漏洞
- IDEA切换git分支
- python寻找屏幕上的特定字符_库Turtle:用Python指挥小海龟在屏幕上绘图,流行的儿童编程...
- npm查找全局安装包命令
- 两日公开课:伯克利深度强化学习训练营 | 视频+PPT
- DP4 最小花费爬楼梯
- 虚拟机中部署ISA Server 2006 防火墙 网络设置(上)
- svn服务端安装、迁移教程、Eclipse切换svn连接库
- RegSetValueEx 计算WCHAR字符长度 wcslen
- M5000 全谱直读光谱仪
- 自举电容充电回路分析
- CF379C-New Year Ratings Change
- PAT 甲级 1118 Birds in Forest (25 分)
- Web 面试之 HTTP和浏览器
- 100本最棒的web前端图书推荐
- rk键盘快捷键快捷键不一致_为什么其他键盘语言的键盘快捷键和可访问性很少起作用...
- Java小白学习二十八——冒泡排序
- eclipse/myeclipse下web项目部署时报没有webroot的错误