JS中常用遍历数组的方法

1,030 阅读3分钟

for...of

for...ofes6中新引入的语法,它可以直接遍历可迭代对象(如数组)中的值,而不需要访问索引。of前是一个变量声明,用于存储每一次迭代的对象,of后是则是需要迭代的对象

let arr = [1,2,3];
for(a of arr){
    console.log(a);
}

image.png

for...of 适用于需要遍历可迭代对象(如数组、字符串、映射等)并逐个处理其元素的场景,尤其当不需要索引或键时。

forEach

forEachArray.prototype上的方法,接下来介绍的几种方法也都源自于此,其的语法结构为:

array.forEach(callback(element[, index[, array]])[, thisArg])

callbakc为回调函数,它会对迭代的每一个元素element执行次回调函数,后面的index array 和thisArg是可选项。它不会改变原数组,也不会创建新数组,而且没有任何返回值

let arr = [1,2,3];
arr.forEach(a => console.log(arr))

image.png

它的缺点是不能中断或者跳出循环,如果需要中途退出应该使用别的方法,如果使用return只能阻止当前回调函数的进行,并不会影响整个forEach操作。

let arr = [1,2,3];
arr.forEach(a => {
    if(a>2){
        return a;
    }// a > 2时终止回调函数的进行
    console.log(a)
  }
)

image.png

适用于仅仅简单遍历数组时使用。

map

基本语法:

const newArray = array.map(callback(currentValue[, index[, array]])[, thisArg])

map方法用来数组映射,它也会对数组中每个元素执行回调函数,但是它不会改变原有的数组,而是将回调函数的返回值作为新元素加入到新的数组中,所以它的返回值将会是一个新的数组

let arr = [1,2,3];
const newArr = arr.map(a => a+1);
console.log(newArr);

image.png

map同样可以用来处理复杂对象:

const users = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 3, name: 'Charlie' }
];

const usernames = users.map(user => user.name);
console.log(usernames); // 输出: ['Alice', 'Bob', 'Charlie']

image.png

所以map应当在原数组不能满足需求时使用,且它能返回一个新数组可以与其他方法一起使用,适合对每个元素进行某种变换操作。如果只是单单想遍历数组则不推荐使用。

filter

基本语法:

const newArray = array.filter(callback(element[, index[, array]])[, thisArg])

map相同,它也会返回一个新数组并且不改变原有数组,只是它的返回方式与map有所不同,它只会返回所有通过callback测试的元素,也就是回调函数的返回值是ture of false,是true则作为返回值加入新数组中,false则会被过滤,如果没有元素通过,则返回一个空数组。

let arr = [1,2,3];
// 小于2的元素执行函数返回值为false 则被过滤
const newArr = arr.filter(a => a > 2);
console.log(newArr);

image.png

它同样可以作为对复杂对象使用,并且过滤。其适用场景是为数组选出符合条件的理想元素,可以用于基于各种条件(如数值范围、字符串匹配、对象属性等)进行筛选。

find和findIndex

基本语法:

const foundElement = array.find(callback(element[, index[, array]])[, thisArg])

const foundElement = array.find(callback(element[, index[, array]])[, thisArg])

find用于查找满足指定条件的第一个元素,它返回的是第一个通过测试的元素,如果没有元素通过则会返回undefined,它不会遍历整个数组,一旦找到符合条件的元素就会停止遍历并且返回该元素

let arr = [1,2,3];
const newArr = arr.find(a => a > 1);
console.log(newArr);

image.png

let arr = [1,2,3];
const newArr = arr.find(a => a > 3);
console.log(newArr);

image.png

findIndexfind不同的是,它返回的是数组的下标并且没有元素通过时它将会返回-1,而不是undefined

let arr = [1,2,3];
const newArr = arr.findIndex(a => a > 3);
console.log(newArr);

image.png