很多时候要对内容进行过滤,例如在有的输入框要求输入的内容不重复,如是需要对重复的内容进行过滤,那么最先想到的就是数组和字符串之间的来回转化,直到消除所有的重复项,以下消除重复项的思路是:先找出数组(如果是字符串那么先转化为数组)重复项的下标,然后将这些下标存储到新的数组;然后在这个新数组里取出这些下标值,接着通过这些下标值将原数组所在位置替换为空字符,接着用正则消除这些空字符,最后对结果的末尾字符删掉,那么替换重复内容完毕,以下是实现代码:
1 <script type="text/javascript"> 2 var arr = [1, 5, 4, 8, 4, 5, 1, 1, 4987, 1, 5, "汉字", "汉字", 4, 5, 5, 4, 5, 8, 5, 8, 0, 5, 45, "hello", "j", "wolrd", "hello", "英文", "wolrd", "中文", "[]fdsaf", "f", "f", "hello", "hello", "中文"]; 3 4 function rest(arr) { 5 var arr2 = []; 6 for (var i = 0; i < arr.length; i++) { 7 (function (n) { 8 var ele = arr[n]; 9 for (var e = n + 1; e <= arr.length; e++) { 10 if (ele == arr[e]) { 11 arr2.push(e) 12 } 13 } 14 })(i) 15 } 16 17 for (var j = 0; j < arr2.length; j++) { 18 arr[arr2[j]] = ""; 19 } 20 var str = arr.join(","); 21 var newtStr = str.replace(/\s/g, ''); 22 var allStr = newtStr.replace(/\,[*,]+/g, ',') 23 return allStr; 24 } 25 26 var strAll = rest(arr); 27 var val = strAll.substring(0, strAll.length - 1); 28 console.log(val); 29 alert(val); 30 </script>
//____________________________________华丽的分割线_____________________________________________________
/*
今天在练习的时候发现数组去重的更简便方法,思路是,对要去重的数组进行遍历,在遍历的时候也复制一份该数组,用第一个数组的第一个和复制的数组进行每一个对
如果有重复项那么就用空格字符串替换,(注意数组在改变值的时候,复制该数组和之前的数组是同时改变,数组是指向的,不知复制的,对象(Object)也是如此,这是关键),
重复项都替换成字符串了,那么用正则替换相同重复字符串,接着防止末尾存在相同项,那么去除的不够彻底,由于只会在末尾才会出现这种情况,那么就好办了,直接去掉末尾空
字符串,也不用去遍历,下面是代码:
function arrUniq(){ var a = [1,5,4,2,1,5,4,5,4,1,5,4,12,4,5,12,5,"中文","中文",4,5,4,8,'中文','中文','英文','英文']; for(var i = 0;i<a.length;i++){ var tmp = a[i], b = a,c; for(var n = i+1;n< b.length;n++){ if(tmp === b[n]){ a[n] =''; } } } c = a.join(","); c = c.replace(/,+/g,','); c = c.split(','); if(c[c.length-1] === ''){c = c.slice(0, c.length-1)} console.log(c); } arrUniq();
es6在处理这种问题时候显得特别容易:
var arr = [1,2,1,1,2,1,'中文','中文','a','a',undefined,undefined,null,null,true,true,,,,,,,,,,123,13]; var newArr = Array.from(new Set(arr)); console.log(newArr)Set
Set:
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Array.from:
Array.from
方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象.
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES6的写法 let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']