javascript 数组去重 unique
晚上无事,偶然看到这么个小测试,拿来写一写,希望大家提建议;
直接上代码:
1 Array.prototype.unique = function (isStrict) { 2 if (this.length < 2) 3 return [this[0]] || []; 4 var tempObj = {}, newArr = []; 5 for (var i = 0; i < this.length; i++) { 6 var v = this[i]; 7 var condition = isStrict ? (typeof tempObj[v] != typeof v) : false; 8 if ((typeof tempObj[v] == "undefined") || condition) { 9 tempObj[v] = v; 10 newArr.push(v); 11 } 12 } 13 return newArr; 14 } 验证: var arr = ["9", 9, 1, 3, 8, 7, 7, 6, 6, 5, 7, 8, 8, 7, 4, 3, 1, 22, 22, ‘a‘, ‘a‘,‘bcd‘, ‘abc‘, ‘bcd‘]; var newArr = arr.unique(true); alert(newArr.join(","));//严格模式:9,9,1,3,8,7,6,5,4,22,a,bcd,abc,将其中"9",9认为不同 var newArr = arr.unique(); alert(newArr.join(","));//普通模式:9,1,3,8,7,6,5,4,22,a,bcd,abc,将其中"9",9认为相同
注意:
1、使用临时对象tempObj,将数组的值作为对象的键值,遍历数组时对当前值根据对象键值判断,不存在就将这个数组的值push到新数组中。提高效率
2、使用类型判断,如果当前数组值做为对象键,所对应的对象值类型与当前值类型一致,则可以根据参数(isStirct严格模式)决定是否去重,true表示严格,对于字符为22,或数字为22都认为一样,否则保留
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。