数组去重
/* * 最基本的去重方法 * 思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。 */ function unique(arr) { var resArr = [arr[0]]; for (var i = 1; i < arr.length; i++) { var repeat = false; for (var j = 0; j < resArr.length; j++) { if (arr[i] == resArr[j]) { repeat = true; break; } } !repeat && resArr.push(arr[i]); } return resArr; }
/* * 利用对象的属性去重(推荐) * 思路:每次取出原数组的元素,然后在对象中访问这个属性,如果存在就说明重复 */ function unique(arr) { var resArr = []; var json = {}; for (var i = 0; i < arr.length; i++) { if (!json[arr[i]]) { resArr.push(arr[i]); json[arr[i]] = 1; } } console.log(json); return resArr; }
/* * 利用下标查询 * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8及其以下版本不支持数组的indexOf方法 */ function unique(array) { var temp = []; for (var i = 0; i < array.length; i++) { ( temp.indexOf(array[i]) == -1 ) && temp.push(array[i]); } return temp; }
/* * 排序后相邻去除法 * 给传入数组排序,排序后相同值相邻, * 然后遍历时,新数组只加入不与前一值重复的值。 * 会打乱原来数组的顺序 */ function unique(array) { array.sort(); //数组在原数组上进行排序,不生成副本 var temp = [ array[0] ]; for (var i = 0; i < array.length; i++) { ( array[i] !== temp[temp.length - 1] ) && temp.push(array[i]); } return temp; }
/* * 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i, * 那么表示第i项是重复的,忽略掉。否则存入结果数组。 * array.indexOf(item,start)方法可返回数组中某个指定的元素位置 */ function unique(array) { var temp = []; for (var i = 0; i < array.length; i++) { ( array.indexOf(array[i]) == i ) && temp.push(array[i]); } return temp; }
// ES6 let arr = [1,2,1,4,2,6,1,5]; let s = new Set(arr); let res = [...new Set(arr)];