视频:https://ke.qq.com/course/231577?taid=3983676656552089
练习29:数组去重
其实你不用第一个和后面的比,第二个和后面的比,也不用两层for循环。
你写一个对象,把数组的每一位当成对象的属性名(一个对象不可能有两个同名的属性),属性值你随意写,写完之后,你只需要把对象的属性名取出来,就可以实现数组去重了。如下:
var arr = [1,1,1,1,2,2,2,3,1,2,1,1,1,1];
var obj = {
"1" : "abc",
"2" : "abc",
"3" : "abc"
}//哈希
Array.prototype.unique = function () {
}
实现:
var arr = [1,1,1,1,2,2,2,3,3,2,2,0,0];
Array.prototype.unique = function () {
var temp = {};//为了比对,先写一个对象
var arr = [];//去重完的数组放到一个新数组中,待会返回
var len = this.length;
for(var i = 0;i < len;i ++){
if (!temp[this[i]]) {
temp[this[i]] = "abc";
arr.push(this[i]);
}
}
return arr;
}
详细执行过程:
首先数组去重的原理你要清楚,把数组的每一位取出来放到对象里面,当成对象的属性名,然后挨个访问对象里面的属性名,看看有没有属性值,
去重前的准备工作,For循环,循环的是这个目标数组的长度,目的是把目标数组的每一位拿出来,看看是不是重复的,然后循环的每一圈都判断数组的当前位的值,放到我们的对象(temp)里面,咱先拿出对象的当前数组位,如:i=0;this[0]=1;看看temp[1]有没有值,没值取出来的就是undefined,取出来的undefined再加一个“!”,接着走if,temp[1]=”abc”;然后就把1push到了数组arr里面了,返回的去重的数组里面就有一个1了,一次执行…
注意:不是说对象里面属性的属性值可以随便取吗,我写的高大上一点,我写this[i],如果你这样写就不一定行了,比如数组里面如果有0的话,你是不能够去重的。