【javascript】——数组去重 ,要求在原型链上编程
Array.prototype.unique = function() { var temp = {}, result = [], len = this.length; for (var i = 0; i < len; i ++) { if(!temp[this[i]]) { temp[this[i]] = 'abc'; //属性值可随意 result.push(this[i]); } } return result; }
将数组的元素作为对象属性的属性名,若对象属性不存在,则创建相应的属性名,并附以任意属性值,当遇到相同的数组元素时,就会跳过,最终对象的属性名就组成去重后的数组。
下面来举例:
数组 a = [1, 5, 1, 7, 5];
对象 obj= {}
返回的数组 : temp = []
(1) 将 1 作为对象的属性名,判断属性名是否存在,不存在,则 : obj= { temp = [1]
1 : 'abc',
}
(2) 将 5 作为对象属性名,判断属性名是否存在,不存在,,则 : obj= { temp = [1, 5]
1 : 'abc',
5 :'abc',
}
(3) 将 1 作为对象属性名,判断属性名是否存在,存在,则 : obj= { temp = [1, 5]
1 : 'abc',
5 :'abc',
}
(4) 将 7 作为对象属性名,判断属性名是否存在,不存在,则 : obj= { temp = [1, 5, 7]
1 : 'abc',
5 :'abc',
7 :'abc',
}
(5) 将 5 作为对象属性名,判断属性名是否存在,存在,则 : obj= { temp = [1, 5, 7]
1 : 'abc',
5 :'abc',
7 :'abc',
}
所以最终去重得到的数组为 : temp = [1, 5, 7]