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:非必填,规定在字符串中开始检索的位置。