说说遍历for in 和for of
for in
-
遍历的是key(Object.keys也可以)
-
会遍历原型上的key
-
遍历数组会不按照顺序
-
可以中断
-
遍历的的是key
var obj = {
a:13,
b:23,
c:33
}
for( var key in obj){
console.log(key);
}
- 会遍历原型上的key
var obj = {
a:13,
b:23,
c:33
}
Object.prototype.pro = 'pro'
for( var key in obj){
console.log(key);
}
// a b c pro
解决办法: hasOwnProperty
for( var key in obj){
if(obj.hasOwnProperty(key)){
console.log(key);
}
}
// a b c
- 可以中断
for( var key in obj){
if(key==='b'){
continue
}
console.log(key);
}
// a c
for of
- 遍历的是有迭代器对象(数组 字符串 map set)集合的值
var obj = 'abc'
for( var key of obj){
console.log(key);
}
// a b c
var obj = ['A', 'B']
for( var key of obj){
console.log(key);
}
// A B
- 不能遍历对象(对象没有迭代器)
- 也可以响应break continue
map
遍历所有元素,每次遍历返回的值,就是当前元素遍历后变成的值
返回新的数组
filter
遍历是返回为true的元素才会被返回
var arr = [1,4,6]
var res = arr.filter( val => {
return val === 4
})
console.log(res) // [4]
some
找到符合的立即返回,不会遍历所有
var arr = [1,4,6]
var res = obj.some( val => {
console.log(val);
return val === 4
})
console.log(res);// 1 4
find
返回符合条件的第一个元素,然后终止遍历
var arr = [1,99,4,66,77]
var find = arr.find(function(element) {
console.log(element);
return element > 10;
});
console.log('find---' + find)
1
99
find---99
findIndex
返回符合条件的第一个元素的位置,然后终止遍历
var arr = [1,99,4,66,77]
var find = arr.find(function(element) {
console.log(element);
return element > 10;
});
console.log('find---' + find)
1
99
find---1
reduce
高级用法
var arr = [2,4,6]
arr.reduce((accumulator,currentVal) => {
return accumulator + currentVal
},initialVal)
// 没有initialVal时:accumulator:arr[0],curentVal:arr[1]
// 有initialVal时:accumulator:initialVal,curentVal:arr[0]
//
var arr = [[1],[3]]
var res = arr.reduce((accumulator,currentVal) => {
return accumulator.concat(currentVal)
return accumulator + currentVal
},[])
console.log(res);[1,3]
flat
var arr = [[1],[3]]
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]]
var res = arr.flat()
var res1 = arr1.flat()
console.log(res); // [1,3]
console.log(res); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
reduce实现 flat
function flatDeep(arr){
return arr.reduce( (acc,val) =>
Array.isArray(val) ? acc.concat(flatDeep(val)) : acc.concat(val)
,[])
}