js中有哪些循环遍历的方法嘞
1.forEach 方法用于调用数组的每个元素,并将元素传递给回调函数。数组中的每个值都会调用回调函数。其语法如下:
const arr=['a','b','c'];
arr.forEach(function(value,index,arr){
value=value+1;
console.log(value);//a1,b1,c1
console.log(index);//0,1,2
console.log(arr);//['a','b','c']
return value;//undefined
});
注意:
forEach没有返回值,不会修改原数组
map()
2.map()方法 方法会返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。该方法按照原始数组元素顺序依次处理元素
正常使用
map(function(数组的值,数组的下标,原数组){});
this使用
map(function(数组的值,数组的下标,原数组){},this的指向);
嵌套使用
由前到后的一级级执行map函数并且返回到新数组
const arr=['a','b','c'];
//正常循环使用
arr.map(function(value,index,arr){
value=value+1;
console.log(value);//a1,b1,c1
console.log(index);//0,1,2
console.log(arr);//['a','b','c']
return value;//['a1','b1','c1']
});
//this使用
var a=[1,2].map(function(e){
return this[e];
},arr);//返回[b,c]
let arr1 = [1, 2, 3];
// 嵌套使用
var b=arr.map(item => item + 1).map(item => item + 2);//返回['a12','b12','c12']
注意:
- map 方法不会对空数组进行检测;
- map 方法遍历数组时会返回一个新数组,不会改变原始数组;
- map方法有返回值,可以return出来,map的回调函数中支持return返回值;
filter()
filter()方法用于过滤数组,满足条件的元素会被返回。它的参数是一个回调函数,所有数组元素依次执行该函数,返回结果为true的元素会被返回,如果没有符合条件的元素,则返回空数组。其语法如下
设置条件 筛选数组,创建新数组
const arr = [1, 2, 3, 4, 5]
arr.filter(item => item > 2)
// 输出结果:[3, 4, 5]
过滤数组 移除数组中的undefined、null、NAN等值:
let arr = [1, undefined, 2, null, 3, false, '', 4, 0]
arr.filter(Boolean)
// 输出结果:[1, 2, 3, 4]
循环对象
for…in 主要用于循环对象属性。循环中的代码每执行一次,就会对对象的属性进行一次操作。其语法如下:
var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
console.log('键名:', i);
console.log('键值:', obj[i]);
}
Object.keys()、Object.values() Object.entries()
用于循环对象,返回的属性值组合创建一个新数组,(但是不含Symbol属性),
Object.keys():返回包含对象键名的数组;
Object.values():返回包含对象键值的数组;
Object.entries():返回包含对象键名和键值的二维数组。
let obj = {
id: 1,
name: 'hello',
age: 18
};
console.log(Object.keys(obj)); // 输出结果: ['id', 'name', 'age']
console.log(Object.values(obj)); // 输出结果: [1, 'hello', 18]
console.log(Object.entries(obj)); // 输出结果: [['id', 1], ['name', 'hello'],['age', 18]];
Object.getOwnPropertyNames()
Object.getOwnPropertyNames()方法可循环出symbol类型和基础类型,返回一个数组,包含了该对象自身的所有属性名。但它能返回不可枚举的属性。
var sy=sybol("kk");
let a = {
name:"yy",
age:11,
sy:11
};
Object.getOwnPropertyNames(a) // ["0", "1","sybol("kk")",length"]
Object.getOwnPropertySymbols()
Object.getOwnPropertySymbols() 方法返回对象自身的 Symbol 属性组成的数组,不包括字符串属性:
let obj = {a: 1}
//通过静态方法添加不可被循环的symbol属性
Object.defineProperties(obj, {
[Symbol('yy')]: {
value: 'Symbol yy',
enumerable: false
}
})
// 给对象添加一个Symbol 属性
obj[Symbol('kk')] = 'Symbol kk'
Object.getOwnPropertySymbols(obj).forEach((key) => {
console.log(obj[key])
})
// 输出结果:Symbol ('yy') Symbol ('kk')