很多时候要对内容进行过滤,例如在有的输入框要求输入的内容不重复,如是需要对重复的内容进行过滤,那么最先想到的就是数组和字符串之间的来回转化,直到消除所有的重复项,以下消除重复项的思路是:先找出数组(如果是字符串那么先转化为数组)重复项的下标,然后将这些下标存储到新的数组;然后在这个新数组里取出这些下标值,接着通过这些下标值将原数组所在位置替换为空字符,接着用正则消除这些空字符,最后对结果的末尾字符删掉,那么替换重复内容完毕,以下是实现代码:
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']