数组的去重,尽可能写出多个方法
参考回答:
var array = ['1','2',1,'1','4','9','1']; function unique(array){ var res=[]; for(var i=0,arraylen=array.length;i<array.length;i++){ for(var j=0,reslen=array.length;j<array.length;j++){ if(array[i]==res[j]) break; } if(j===reslen) { res.push(array[i]) } } return res; } console.log(unique(array));
2、用indexOf简化内层循环:indexOf函数返回某个指定的字符在字符串中第一次出现的位置
var array = ['1','2',1,'1','4','9','1']; function unique(array){ var res=[]; for(var i=0,len=array.length;i<len;i++){ var current=array[i]; if(res.indexOf(current)===-1) { res.push(current); } } return res; } console.log(unique(array));
排序后去重
var array = ['1','2',1,'1','4','9','1']; function unique(array) {
// res用来存储结果
var res=[]; var sortArray = array.concat().sort(); console.log(sortArray); var seen; for(var i=0,len=sortArray.length;i<len;i++){ if(!i||seen!==sortArray[i]){ res.push(sortArray[i]); } seen=sortArray[i]; } return res; } console.log(unique(array)); //
ES6的方法,使用set和map数据结构,以set为例,它类似于数组,但是成员的值都是唯一的,没有重复的值,很适合这个题目
var array = ['1','2',1,'1','4','4','1']; function unique(array) {
// res用来存储结果
return Array.from(new Set(array)); } console.log(unique(array));
或者更简化点
var array = ['1','2',1,'1','4','4','1']; function unique(array) {
// res用来存储结果
return [...new Set(array)]; } console.log(unique(array));
参考资料:冴羽大大的JavaScript专题博客系列