xxxBW/algorithm

提个小小的建议,关于数组的去重

Closed this issue · 4 comments

如果我要对下面的数组去重呢?

var arr = [1,2,3,'1','2','3','4','5',1,2,3]
xxxBW commented

更改之后利用类型和数值来进行判断,之后更改为用for循环,因为用forEach会把字符串转换为数字。
for(var i = 0;i < len;i++) { // 利用类型和数值做键值 var key = typeof(arr[i]) + arr[i]; if(!obj[key]) { // obj中不存在该属性则添加并且把字段加入到str中 obj[key] = true; str.push(arr[i]); } }

forEach不会把数字转换成字符串的 , 不然你看下面运行的结果

var arr = [1,2,3,'1','2','3','4','5',1,2,3];
arr.forEach(function(item,index){
  console.log(typeof item);
})

把数字变成字符串的是它 ====> obj[key]

换成

var key = JSON.stringify(item);
if( !obj[key] ){
 obj[key] = true;
 str.push(arr[i]);
}

应该就可以

xxxBW commented

咦,真的是酱紫的,昨晚不知怎么测的,我看typeof item都是number