js数组去重最简单的方法 js数组去重复的数据( 二 )

< 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里,则添加到新数组 。

猜你喜欢