js数组、数组对象的遍历、数组去重

一 数组遍历

方法一:for循环

 

方法二:forEach遍历

forEach遍历数组 性能低于for循环,且不可使用break中断循环,也不能使用return返回外层函数
arr.forEach(function(item,index){
console.log("forEach遍历",index,item);
});

 

方法三:map遍历

map遍历 支持return返回
arr.map(function(item,index){
console.log("forEach遍历",index,item);
});

总结:map、forEach都是ECMA5新增数组的方法,所以IE9以下浏览器还不支持

 

方法四:for-of遍历

for-of遍历,ES6新增功能,支持数组、类数组对象、及字符串遍历,避开for-in循环的缺陷,且可正确响应break,continue和break语句

for(let item of arr){
  console.log(item)

}

//hasOwnProperty 判断当前json对象item中是否包含某个属性key
if(item.hasOwnProperty(value)){
  console.log(value);
}

 

方法五:find 遍历数组、json对象

arr.find(function(item){
  console.log(item[key2]);
})

 

 

实例:获取接送对象里的某个属性值

let jsonObj = [{id:3,name:"张三"},{id:2,name:"yali"}];

function jsonKey(obj,key,value,key2){

  let _value = '';
  obj.find(function(item){
    if(item[key] && item[key]==value){
      _value = item[key2];
    }
  })
  return _value;

}

var getVal = jsonKey(jsonObj,'name',"张三",'id')

console.log(getVal);

 

方法六:flat() 多维数组一维化

let ary = [1, [2, [3, [4, 5]]], 6];

 arr_flat = arr.flat(Infinity);  //[1, 2, 3, 4, 5, 6]

 

三、数组去重

1.ES6 Set去重法(推荐)

function unique5(arr){
  var x = new Set(arr);
 return [...x];
}

 

2.数组遍历法

新数组中找不到该元素时,将该元素加入。

var arr=[2,8,5,0,5,2,6,7,2];
function unique1(arr){
  var hash=[];
  for (var i = 0; i < arr.length; i++) {
     if(hash.indexOf(arr[i])==-1){
      hash.push(arr[i]);
     }
  }
  return hash;
}

 

3.数组下标判断法

for循环中,当前元素在数组中的indexOf与for循环的i一致时,加入。

function unique2(arr){
  var hash=[];
  for (var i = 0; i < arr.length; i++) {
     if(arr.indexOf(arr[i])==i){
      hash.push(arr[i]);
     }
  }
  return hash;
}

 

4.排序+相邻去除法

sort排序后,新数组hash中最后一个元素跟当前for循环到的元素不匹配时,加入。

function unique3(arr){
  arr.sort();
  var hash=[arr[0]];
  for (var i = 1; i < arr.length; i++) {
     if(arr[i]!=hash[hash.length-1]){
      hash.push(arr[i]);
     }
  }
  return hash;
}

 

补充indexOf用法:

stringObject.indexOf(searchvalue,fromindex) fromindex:非必填,规定在字符串中开始检索的位置。
posted @ 2019-05-23 10:09  liuxu_xrl  阅读(520)  评论(0编辑  收藏  举报