java完成数组的去重工作标记,JS 7种数组去重的方法

JS 数组去重的方法

方法一:多层循环比较

利用splice的特性,比较两个数是否相同,获得相同元素的下标,删除相同元素,改变原数组,获得去重后的数组

function uniqueArr(arr){

for(var i = 0;i < arr.length ;i++){

for(var j = i + 1;j < arr.length - 1; j++){

if(arr[i] == arr[j]){

arr.splice(j,1);

}

}

}

return arr;

}

方法二:利用indexOf()

设置一个新的数据用来接收数据,利用indexOf 来判断 数据是否存在于 新数组中,不存在,则添加进去,获得去重后的新数组

function uniqueArr(arr){

var newArr = [];

for(var i = 0;i < arr.length;i++){

if(newArr.indexOf(arr[i]) < 0){

newArr.push(arr[i]);

}

}

return newArr;

}

方法三:对象键值对法

定义一个对象,用数组中的元素作为对象属性名,如果对象名不存在,那么将该元素添加到新数组中,给对应的属性值 设置 一个值作为标记,不一定为1,获得去重后的新数组

function uniqueArr(arr){

var obj = {};

var newArr = [];

for(var i = 0;i < arr.length;i++){

if(!obj[arr[i]]){

obj[arr[i]] = 1;

newArr.push(arr[i]);

}

}

return newArr;

}

方法四:

定义一个新数组,将 arr 的第一个值添加到新数组中作为比较对象,遍历从数组的第二个值开始逐一比较 push 后的新数组中每个元素比较,看是否有相同的,不同就添加,获得不重复新数组

function uniqueArr(arr){

var newArr = [arr[0]];

for(var i = 1;i < arr.length;i++){

var flag = false;

for(var j = 0;j < newArr.length;j++){

if(newArr[j] === arr[i]){

flag = true;

break;

}

}

if(!flag) newArr.push(arr[i]);

}

return newArr;

}

方法五:先排序,再相邻两两比较

function uniqueArr(arr){

arr.sort();

for(var i = 0;i < arr.length;i++){

if(arr[i] === arr[i-1]){

arr.splice(i,1);

}

}

return arr;

}

方法六:利用indexOf和 lastIndexOf方法判断

利用indexOf() 方法的特性,从数组下标0开始查找元素,返回第一次出现位置的下标,lastIndexOf() 从数组末尾开始查找元素,返回从后向前找到元素的第一次出现位置的下标。

如果从数组开始进行查找 的元素和从后进行查找的元素 下标相同,表示找到的是同一个元素。

function uniqueArr(arr){

for(var i = 0;i < arr.length;i++){

if( arr.indexOf(arr[i]) !== arr.lastIndexOf(arr[i])){

arr.splice(arr.lastIndexOf(arr[i]),1);

}

}

return arr;

}

方法七:ES6 Set()方法

new Set() 方法不允许有重复数据,但是返回的是一个类数组,所以要用 Array.from()方法转换成数组

function uniqueArr(arr){

return Array.from(new Set(arr));

}

来源:https://www.cnblogs.com/ybzy/p/12593344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值