forEach()
forEach()方法对数组的每个元素执行,进行遍历。
let arr = ['a','b','c','d','e'];let forEach = arr.forEach((ele,idx,arr)=>{ console.log(ele); //遍历数组元素 console.log(idx); //数组下标 console.log(arr); //数组本身})
filter()
filter()方法,返回一个新数组不改变原来数组,常用语删除某一项。必须有return
arr = ['a','b','c','d','e'];let filterArr = arr.filter((ele,idx,arr)=>{ return ele !== 'b'})console.log(filterArr); // [ 'a', 'c', 'd', 'e' ]
map()
map()方法,返回一个新数组,常用语修改数组某一项。必须有return。
arr = ['a', 'b', 'c', 'd', 'e'];let mapArr = arr.map((ele,idx,arr)=>{ if(ele === 'a'){ return 1 } return ele})console.log(mapArr);
for…in
for...in...可以遍历除symbol值以外的任意对象。
let obj = {a:1, b:2, c:3};1
for (k in obj) {
console.log(k,obj[k]); // k是key值 obj[k]是value值
// a 1
// b 2
// c 3
}
let arr = [1,2,3]
for(k in arr){
console.log(k,arr[k]); // k下标 arr[k]参数
// 0 1
// 1 2
// 2 3
}
for…of
for..of多用于遍历数组。
const arr = ['a', 'b', 'c'];
for (k of arr) {
console.log(k);
// "a"
// "b"
// "c"
}
// 遍历对象需要使用Object.keys或者Object.values
let obj = {name:'小明',age:18};
for(k of Object.keys(obj)){
console.log(k) // name age
}
let obj = {name:'小明',age:18};
for(k of Object.values(obj)){
console.log(k) // 小明 18
}
for..in和for…of的区别
- 1.
for...in循环出的是key值,for...of循环出的是value值 - 2.推荐在循环对象属性的时候,使用
for...in,在遍历数组的时候的时候使用for...of - 3.
for...of不能循环普通的对象,需要通过和Object.keys()搭配使用 - 4.
from...in会继承原型链上的属性,需要配合hsaOwnProperty来枚举自己的属性,而不是继承来的属性。
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
// 继承原型上的属性
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
// 通过hasOwnProperty来判断自己的属性。
for (let i in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // logs 0, 1, 2, "foo"
}
}
// of直接遍历自己存在的参数。
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}