数组中某个元素相同的去重_几种去除数组中重复元素的方法、数组去重

工作中遇到的一个问题,就是去除数组中重复的元素,记录一下几种有效的方法:

第一种思路:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中。

去除数组重复项

var color = ['red','blue','green','pink','yellow','blue','black','red'];functionunique(arr){//遍历arr,把元素分别放入tmp数组(不存在才放)

var tmp = newArray();for(var i inarr){//该元素在tmp内部不存在才允许追加

if(tmp.indexOf(arr[i])==-1){

tmp.push(arr[i]);

}

}returntmp;

}var arr =unique(color);

console.log(arr);

第二种思路是:把目标数组arr的元素值和键的位置调换 自动就把重复的元素给删除掉了,调换后的样子:array('red'=>1,'blue'=>1,'green'=>1,'pink'=>1,'yellow'=>1,'black'=>1)

去除数组重复项

var color = ['red','blue','green','pink','yellow','blue','black','red'];functionunique(arr){var tmp = newArray();for(var m inarr){

tmp[arr[m]]=1;

}//再把键和值的位置再次调换

console.log(tmp);var tmparr = newArray();for(var n intmp){

tmparr.push(n);

}returntmparr;

}var arr =unique(color);

console.log(arr);

第三种思路:我们可以 用一个hashtable的结构记录已有的元素,这样就可以避免内层循环。

去除数组重复项

var color = ['red','blue','green','pink','yellow','blue','black','red'];functionunique(arr) {var result = [], hash ={};for (var i = 0, elem; (elem = arr[i]) != null; i++) {if (!hash[elem]) {

result.push(elem);

hash[elem]= true;

}

}returnresult;

}var arr =unique(color);

console.log(arr);

----------------------------------------------------------------------------------------------------补充----------------------------------------------------------------------------------------------------

第四种思路:使用ES6数组的reduce方法,封装了一个函数(推荐)

/**

* 数组去重

* @param {*} arr 接收的原数组

* @param {*} key 如果是对象数组[{id: 1}, {id: 2}, {id: 3}],则需要以什么key作为重复的标准,普通数组[1,2,3,2]不需要*/exportfunctionarrUnique(arr, key) {

let returnArr=[];if(key) {//对象数组去重

const obj ={};

returnArr= arr.reduce((cur, next) =>{

obj[next[key]]? '' : obj[next[key]] = true &&cur.push(next);returncur;

}, []);returnreturnArr;

}//普通数组去重

returnArr = arr.reduce((cur, next) =>{!cur.includes(next) &&cur.push(next);returncur;

}, []);returnreturnArr;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值