前言:
此时我们对“数组分解js”大体比较着重,朋友们都需要了解一些“数组分解js”的相关文章。那么小编在网络上网罗了一些对于“数组分解js””的相关资讯,希望小伙伴们能喜欢,大家快快来学习一下吧!学习了就要学以致用,不思考就不会记得牢,所以脑袋里面的第一个想法就是数组去重,在网上也百度了一下,很多公司面试的时候有很大的几率会问数组去重的问题。所以今天我就给大家分享我所用过的四种数组去重的方法。
1、 第一种办法主要是用两个循环来遍历整个数组,从第一个开始跟后面的比较,找到一样的就删除后面重复的值。数组去重无非就是找到两个以上重复的值,保留其中一个就可以了,这种办法很好理解,但是效率不高。代码如下:
function delRepeat(arr){
for(var i=0;i<arr.length-1;i++){//从数组第一个开始跟第二个数比较,总共要比较arr.leng-1次
for(var j<i+1;j<arr.length;j++){
if(arr[i]===arr[j]){//这里最好写三个等号,因为三个等号才代表全等。
arr.splice(j,1);//splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。第一个值代表的是数组下表,代表从那个下表开始删除第二个值代表删除的值的数量。
j--; //防止错错重复数组元素
}
}
}return arr;
}
2、第二种办法是利用对象属性名不能重复的原理来去重的,这个也是我写的这几种方法里面,去重效率最高的一种,代码如下:
function delRepeat(arr){
var obj={};
var newArr=[];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){//利用对象属性名不能重复,判断当前的对象中有没有这个属性值;
obj[arr[i]]=1;//如果当前对象没有这个值,就给这个对象里面的属性值赋值为"1",{arr[i]:1}。
newArr.push(arr[i]);//push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。这里是把找到的数组值放到一个新的数组(arr1)中。
}
}
return newArr;
}
备注:js对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成。比如是var obj={id:1,name:" Timmy"}
3、 第三种方法是利用Set结构的属性来去重,代码如下:
function delRepeat(arr){
return Array.from(new Set(arr));
}
/*Set集合是默认去重复的,添加的两个元素如果严格相等就不会添加进去;两个new出来的字符串也不相等。*/
备注:Set是ES6 提供了新的数据结构 。它类似于数组,但是成员的值都是唯一的,没有重复的值。(不包括空对象),所以可以用这个办法来数组去重。
4、第四种方法原理其实跟第一种差不多的,不过分成了两个函数来写,第一个函数来找到数组中某一个值有没有重复的,要是没有就返回false,第二个函数就来遍历整个数组,每个都来调用第一个函数,从而达到数组去重的。
/*判断数组中是否有某个元素
*arr array 要去重的数组
* value 数组中的值
**/
function has(arr, value) {
for (var i = 0;i < arr.length; i++) {
if (arr[i] === value)
return true;
}
return false;
}
function delRepeat(arr){
var newArr = [];
for (var i = 0;len = arr.length; i < len; i++) {
if(has(newArr, arr[i]) === false) {// 调用第一个函数has(),调用arr.length次函数 ,把没有重复的值放到一个新的数组。
newArr.push(arr[i]);//前面有提到push的用途,就是给数组末尾添加一个或者多个值,这里是给newArr里面存放没有重复的数组值。 }
}
return newArr;
}
标签: #数组分解js