< arr.length; i){ if (new_array.indexOf(arr[i]) === -1){ new_array.push(arr[i]) } } return new_array;};var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, NaN, "NaN", 0, {…}, {…}] 原理:新建一个空的结果数组,for 循环原数组,利用indexOf方法判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组 。
优点:利用ES6数组的新方法,逻辑简单,容易理解 。
缺点:不能去重NaN,object对象,需要考虑兼容问题 。
三、利用ES6的数组方法includes去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必须为数组\\\'); return; } var new_array = []; for(var i = 0; i< arr.length; i){ if ( !new_array.includes(arr[i]) ){ new_array.push(arr[i])} } return new_array;};var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}, {…}] 原理:创建个新的空数组new_array,遍历目标数组,利用includes方法判断目标数组的元素是否在新数组里,如果没有,将元素添加到新数组中,如果有则忽略 。
优点:利用ES6数组的新方法,逻辑简单,容易理解 。
缺点:不能去重object对象,需要考虑兼容性 。
四、利用ES6的filter和indexOf去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必须为数组\\\'); return; } return arr.filter(function(item, index, arr){ return arr.indexOf(item, 0) === index; });}var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, "NaN", 0, {…}, {…}] 原理:给filter一个过滤条件,获取元素在原始数组的第一个索引,如果等于当前索引值,返回当前元素 。
优点:利用ES6数组的新方法,逻辑简单,容易理解 。
缺点:不能去重object对象和NaN,需要考虑兼容性 。
五、利用ES6的Map数据格式去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必须为数组\\\'); return; } let map = new Map(); let new_array = new Array(); for(let i = 0; i原理:创建一个新数组,遍历目标数组,如果元素没有在Map里,则添加到新数组 。
优点:利用ES6数组的新数据结构,逻辑简单,容易理解 。
缺点:不能去重object对象,需要考虑兼容性 。
六、利用ES6的reduce和includes去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必须为数组\\\'); return; } return arr.reduce( (prev, cur) => prev.includes(cur) ? prev : [...prev,cur], []);}var arr = [2,2,\\\'a\\\',\\\'a\\\',true,true,\\\'true\\\',\\\'true\\\',false,false,\\\'false\\\',\\\'false\\\',undefined,undefined,null,null,NaN,NaN,\\\'NaN\\\',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}, {…}] 原理:创建一个新数组,遍历目标数组,如果元素没有在Map里,则添加到新数组 。
猜你喜欢
- php怎么把数组合成字符串 php数组拼接成字符串
- 最实用的2种方法 php数组转字符串函数有哪些
- 西瓜的保存方法最简单 西瓜怎么保存
- 油条怎么炸 最简单的炸油条方法
- 荸荠最简单的吃法是 一看就学会了
- 君子兰叶片不会能剪去重生吗
- 部落冲突13本打法 最简单的部落冲突13本打法
- 除鞋臭的办法有哪些
- 最简单的混凝土怎么做 制作混凝土的方法
- 海南木瓜最简单的食用方法 海南木瓜怎么吃
