之前的几种办法都是ES3的办法,也就是说如果你须要兼容低版本浏览器能够参考之前的办法。
明天的要说的是ES5的办法。数组的办法在ES5时减少了几个比方indexOf啦foreEach啦那么第一种就先用这两个。
其实它的原理还是前一个元素和后一个元素的比拟。不明确前后比照的同学能够到后面文章看看啊!正好你能够多看一个,字不多能看懂!
办法一 索引比照法:
还是先创立老数组新数组,空的新数组就能够了
var arr = [3, 5, 2, 5, 7, 23, 5, 7];var newArr = [];
接着给老数组用forEach办法,为什么用这个?咱们都晓得,之前始终用for循环的办法,然而ES5提供的几种遍历办法种,能够接管一个参数,这个参数别离是:数组元素,索引,数组自身。这些货色间接就能够用,岂不是很不便吗?
function fn(a, b, c) {}arr.forEach(fn);
之后在拿到所有的货色,须要判断前后值是否一样,这是有须要用到indexOf,它的作用是能够检测这个值在数组种是否存在,不存在就返回-1。那么不存在意味着没找到一样的,对咱们来说就是须要这个,所以push。
if (arr.indexOf(a,(b+1))==-1) { newArr.push(a);}
再把代码重新整理,写一遍残缺的
var arr = [3, 5, 2, 5, 7, 23, 5, 7];var newArr = [];function fn(a, b, c) { if (arr.indexOf(a, (b+1)) == -1) { newArr.push(a); }}arr.forEach(fn);console.log(newArr);
办法二 索引查找法:
接下来看索引查找法,当然了也是利用ES5提供的新办法。先弄一个老数组一个新数组。新数组先给个值,就给老数组的第一个,这样前面好比拟。
var arr = [3, 5, 2, 7, 23, 5, 7];var newArr = [arr[0]];
判断新数组的值在老数组有没有一样的,如果没有还是用indexOf照元素,没找到的返回-1,没找到就是没有,所以push。
for (var i = 1; i < arr.length; i++) { if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); }}
以下是最终代码:
var arr = [3, 5, 2, 7, 23, 5, 7];var newArr = [arr[0]];for (var i = 1; i < arr.length; i++) { if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); }}console.log(newArr);
大家应该发现了,用了ES5提供的新办法之后简略了不少,但前提是之前的办法要了解才行。低版本浏览器不要用这样的办法,否则不出成果或者报错。
那么也心愿大家能关注我我都公众号web-jianma,手机浏览随时随地~