JavaScript数组高级语法及其使用

这篇博客详细介绍了JavaScript数组的高级操作,包括map、for in、for of、forEach、filter、reduce方法的使用,以及数组元素查询方法如indexOf、includes、find和findIndex。此外,还讲解了两个数组转换方法Array.from和Array.of的应用场景和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.map方法为数组中的每一个元素依次执行回调函数,调用该方法会返回一个新的数组(即不会影响改变原始数组内容),新数组中的元素为原始数组元素调用函数经过处理后的值

 语法:
 array.map(function(curValue,index,arr){
      ...执行内容
    },thisValue)
        curValue:必须参数,当前数组元素的值
        index   :可选参数,当前数组元素的下标值
        arr     :可选参数,调用map方法的数组对象
        thisValue:可选参数,执行回调函数时,该值被用作回调函数中的this指向,若没有设置,this指向为全局对象。
**案例:**
 let arrs = [1, 2, 4, 6, 3, 9];
    //调用map方法将arrs数组中的每一个元素同时乘以2
    let arr=arrs.map(function(curValue){
      return curValue*2
    })
    console.log(arr);//[2,4,8,12,6,18]

2.for in方法,用于循环遍历数组元素

 **语法:**
    for(let index in 数组名){
      ...执行内容
      //这里的index表示遍历到的每个数组元素的下标值.
    }
    
    案例:
        let arr=[1,2,3,4,5];
        for(let index in arr){
          console.log(index);//0,1,2,3,4
          console.log(arr[index]);//1,2,3,4,4
        }

3.for of方法,用于循环遍历数组元素

语法:
for(let value of 数组名){
  ...执行内容
  //这里的value表示遍历到的每个数组元素本身.
}
案例:
  let arr=[2,3,5,1,3];
  for(let value of arr){
    console.log(value);//2,3,5,1,3
  }

4.forEach方法,用于调用指定数组中的每个元素,并将元素传递给回调函数进行相应处理。

  语法:
    数组名.forEach(function(curValue,index,arr){
        ...元素处理内容
    },thisValue)
        curValue:必须参数,当前数组元素的值
        index   :可选参数,当前数组元素的下标值
        arr     :可选参数,调用map方法的数组对象
        thisValue:可选参数,执行回调函数时,该值被用作回调函数中的this指向,若没有设置,this指向为全局对象。
    案例:
        let arrs = [1, 3, 5, 7, 9];
        //调用forEach方法将数组中的某个元素删除
        arrs.forEach(function (curValue,index) {
            if(curValue==7){
              arrs.splice(index,1);
            }
        })
        console.log(arrs);//[1,3,5,9]

5.filter方法为数组中的每一个元素依次执行回调函数,该方法会创建一个新的数组,新数组中的元素是满足了指定要求后返回的原始数组中的元素,若没有元素满足要球,则这个新数组为空数组

 语法:
    数组名.filter(function(curValue,index,arr){
        return  指定的需求判断(当为真时,返回出去;当为假时,自动过滤掉,进行下一个元素判断)
    },thisValue)
        curValue:必须参数,当前数组元素的值
        index   :可选参数,当前数组元素的下标值
        arr     :可选参数,调用map方法的数组对象
        thisValue:可选参数,执行回调函数时,该值被用作回调函数中的this指向,若没有设置,this指向为全局对象。
    案例:
        let arrs=[1,3,5,2,4,6,8,9];
        let newArr=arrs.filter(function(curValue){
          return curValue>5;//这里会逐个判断arrs数组中的每个元素是否大于5,当满足条件时,会将这个元素返回到新数组中,若不满足要求,则会自动过滤掉这个元素。
        })
        console.log(newArr);//[6,8,9]

6.reduce方法为数组中的每一个元素依次执行回调函数,reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 可以作为一个高阶函数,用于函数的 compose。

 语法:
    数组名.reduce(function(preValue,curValue,index,arr){

    },initValue)
          preValue:上一次调用回调返回的值,或者是提供的初始值(initValue)
          curValue:必须参数,当前数组元素的值
          index   :可选参数,当前数组元素的下标值
          arr     :可选参数,调用map方法的数组对象
          initValue:可选参数,作为第一次调用回调函数时的第一个参数的值。如果没有提供initValue,则将使用数组中的第一个元素(即curValue的值从下标1开始)。在没有初始值的空数组上调用 reduce 将报错。(使用reduce时,推荐设置initValue这个参数,将其设置为 0)
    注意:如果没有提供初始值initValue,reduce会从索引下标为1的地方开始执行回调函数方法,跳过第一个索引。如果提供initValue,从索引0开始。
          所以:使用reduce时,推荐设置initValue这个参数,将其设置为 0
    案例:
        let arrs=[5,3,4,2,5,1,1,6];
        //调用reduce方法进行数组去重
        let newArr=arrs.reduce(function(pre,cur){
          if(pre.indexOf(cur)==-1){
            pre.push(cur)
          }
          return pre
        },[])
        console.log(newArr);//[5,3,4,2,1,6]

7.数组元素查询的方法

1.indexOf方法,用于查询某个元素是否在数组中,若元素存在,则返回该元素的下标值;若元素不存在,则返回-1。

 语法: 
 数组名.indexOf(需要查找的数组元素);
    案例:
        let arr=['h','l','o','w','j'];
        arr.indexOf('o');//因为字符o存在于数组中,所以返回值为字符在数组中的位置 2
        arr.indexOf('k');//因为字符k不存在数组中,所以返回值为 -1

2.includes方法,用来判断一个数组中是否包含某个指定的元素,如果该元素存在于数组中,则返回 true,不存在,则false。

 语法
    :数组名.includes(需要查询的数组元素);
    案例:
        let arr=['h','l','o','w','j'];
        arr.includes('k');//因为数组中不存在元素 'k',所以返回值为false
        arr.includes('w');//因为数组中存在元素 'w',所以返回值为true
    注意:
        使用includes方法并不能查找引用类型(对象类型),因为它们的内存地址是不相等的

3.find()方法,该方法返回查询的数组中满足判定条件的第一个元素,如果检索到满足条件的元素,那么返回此元素,否则返回undefined。
语法:

 数组名.find(function(curValue,index,arr){
      ...条件判断内容
    },thisValue)
          curValue:必须参数,当前数组元素的值
          index   :可选参数,当前数组元素的下标值
          arr     :可选参数,调用find方法的数组对象
          thisValue:可选参数,执行回调函数时,该值被用作回调函数中的this指向,若没有设置,this指向为全局对象。
    案例:
        let arrs=[3,2,1,5,7,4];
        let num=arrs.find(function(curValue){
          return curValue>4
        });
        console.log(num);//5,因为当查询到5大于4时,就满足了条件,不再继续执行后面的判断,所以只输出5

4.findIndex方法,该方法返回数值中满足条件的第一个元素的索引值(下标值);若都不满足条件,则返回值为-1

语法:
    数组名.findIndex(function(curValue,index,arr){
      ...//判断条件执行
    },thisValue)
          curValue:必须参数,当前数组元素的值
          index   :可选参数,当前数组元素的下标值
          arr     :可选参数,调用find方法的数组对象
          thisValue:可选参数,执行回调函数时,该值被用作回调函数中的this指向,若没有设置,this指向为全局对象。
    案例:
        let arrs=[3,2,1,5,7,4];
        let num=arrs.find(function(curValue){
          return curValue>4
        });
        console.log(num);//3,因为当查询到5大于4时,就满足了条件,不再继续执行后面的判断,所以只输出5的下标值3

8.数组转换

在ES6中存在,为Array对象新增了一些方法,用于我们对数组进行处理。

1.Array.from()方法

Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。

语法:

Array.from(arraylike,fn)

arraylike:被转换的类数组对象
fn:可选函数,若是声明了此函数,则在进行转换时,数组中的每一个元素都将调用一次此函数。

案例:

// 将类数组对象转换为数组
// 类似数组对象即对象中的键名为数字或字符串数字的对象,同时对象中存在length属性,用于表示数组的长度
// 对象中的数字键名即表示该属性在数组中的下标位置.

// 案例一
let list={
	1:'张三',
	3:14,
	'5':'男',
	6:'江苏南京',
	length:8
}
console.log(Array.from(list)); // [undefined,'张三',undefined,14,undefined,'男','江苏南京',undefined]

// 案例二
let fn=function(a,b,c){
	let arr=Array.from(arguments);
	arr.map(item=>{
		console.log(item);
	})
}

// 案例三
let sets=new Set([1,2,3,1,4,5]); // 注意:Set集合中不会有重复值,因此,这里最终为 Set(5){1,2,3,4,5}
let arr=Array.from(sets);
console.log(arr); // [1,2,3,4,5];

2.Array.of()方法

Array.of方法用于将一组值,转换为数组。

语法:

Array.of(参数)

当没有传递参数时,该方法返回值为一个空数组。
当传入一个undefined参数时,该方法返回一个元素为undefined的数组 --[undefined]
当传入一个参数时,该方法返回一个元素为传入值的元素 --[传入值]
当传入多个参数时,该方法返回一个元素为传入参数的数组

案例:

Array.of(); // []
Array.of(undefined); //[undefined]
Array.of('Hello'); // ['Hello']
Array.of('Hello',true,12) ; // ['Hello',true,12]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值