话不多说,直接开始介绍:
数组遍历方法
-
for循环
Javascript1let arr = [1, 2, 3, 4, 5]; 2for (let i = 0; i < arr.length; i++) { 3 console.log(arr[i]); 4}
这是最基础的循环遍历数组的方式,通过索引访问数组元素。
-
for...of循环
Javascript1for (let value of arr) { 2 console.log(value); 3}
for...of
循环可以直接迭代可迭代对象(如数组)的值,适用于任何实现了迭代器接口的数据结构。 -
forEach()
Javascript1arr.forEach((value, index, array) => { 2 console.log(value); 3});
forEach()
方法对数组中的每个元素执行指定的函数,但它不能被中断(无法使用break或return跳出循环)。 -
map()
Javascript1let mappedArr = arr.map((value, index, array) => { 2 return value * 2; // 返回一个新的数组,其中元素是原数组元素的两倍 3});
map()
方法创建一个新数组,其结果是调用提供的函数在每个元素上产生的结果。 -
some()
Javascript1let isFound = arr.some((value, index, array) => { 2 return value > 3; // 如果数组中有任意元素使条件为真,则返回true 3});
some()
方法测试数组中是否存在至少一个元素使得测试函数返回true。 -
every()
Javascript1let allLessThan5 = arr.every((value, index, array) => { 2 return value < 5; // 如果数组中所有元素都使条件为真,则返回true 3});
every()
方法测试数组中的所有元素是否都使得提供的测试函数返回true。 -
filter()
Javascript1let filteredArr = arr.filter((value, index, array) => { 2 return value % 2 === 0; // 返回一个新的数组,只包含使条件为真的元素 3});
filter()
方法创建一个新数组,其中包含通过测试的所有元素。
对象遍历方法
-
for...in循环
Javascript1let obj = { a: 1, b: 2, c: 3 }; 2for (let key in obj) { 3 if (obj.hasOwnProperty(key)) { 4 console.log(key + ": " + obj[key]); 5 } 6}
for...in
循环用于遍历对象的可枚举属性,包括继承的属性,因此通常会配合hasOwnProperty()
检查属性是否属于对象自身。 -
Object.keys().forEach()
Javascript1Object.keys(obj).forEach(key => { 2 console.log(key + ": " + obj[key]); 3});
使用
Object.keys()
获取对象的所有自有可枚举属性名数组,再对其使用forEach()
遍历。 -
Object.entries().forEach()
Javascript1Object.entries(obj).forEach(([key, value]) => { 2 console.log(key + ": " + value); 3});
Object.entries()
返回一个二维数组,包含了对象的所有可枚举属性及其值,可以遍历这个数组得到键值对。 -
for...of + Object.entries()
Javascript1for (let [key, value] of Object.entries(obj)) { 2 console.log(key + ": " + value); 3}
结合
for...of
和Object.entries()
可以简洁地遍历对象的键值对。
其他遍历机制
除了以上提到的,还有其他像reduce()
(用于数组的累加或者聚合)、find()
(找到第一个符合条件的数组元素),以及findIndex()
(找到第一个符合条件的元素的索引)等方法也是常用的遍历手段,不过它们并不严格意义上逐个遍历整个集合,而是在遍历过程中寻找特定条件的元素。
请注意,不同的遍历方法适用场景各异,根据实际需求选择合适的遍历方式非常重要。同时,在遍历过程中要考虑到原型链的影响以及遍历效率等因素。