JavaScript中的Array操作(ECMA5新特性)

   在上一博文中介绍了JavaScript中的数据类型,同时也例举了一些数组的一些常用的方法。本篇文章,将继续介绍数组的操作方法——ECMA5中的数组新特性。

ECMA5中的数组新特性

一、元素定位方法

  1. indexOf:返回指定元素在数组中从指定索引开始从前向后首次出现的位置,索引从0开始,未找到指定元素时返回-1。

    该方法是个重载方法:一个入参,两个入参
    array.indexOf(searchValue);//默认从索引0开始查找
    array.indexOf(searchvalue,fromindex);

    var arr=[1,2,4,23,4,5,7,3];//定义数组
    //一个参数的indexOf方法调用:arr.indexOf(value);
    var result1 = arr.indexOf(4);
    console.log(result1);//控制台输出2
    var result2 = arr.indexOf(43);
    console.log(result2);//控制台输出-1
    
    var arr=[1,2,4,23,4,5,7,3];//定义数组
    //两个参数的indexOf方法调用:arr.indexOf(searchValue,fromIndex);
    var result3 = arr.indexOf(3,4);//从索引4开始向后找元素3首次出现时的索引
    console.log(result3);//控制台输出7
    var result4 = arr.indexOf(6,4);//从索引4开始向后找元素6首次出现时的索引
    console.log(result4);//控制台输出-1
  2. lastIndexOf:返回指定元素在数组中从指定索引开始从后向前首次出现的位置,索引从0开始,未找到指定元素时返回-1。

    该方法是个重载方法:一个入参,两个入参
    array.lastIndexOf(searchValue);//默认从索引0开始查找
    array.lastIndexOf(searchvalue,fromindex);

    var arr=[1,2,4,23,4,5,7,3];//定义数组
    //一个参数的lastIndexOf方法调用:arr.lastIndexOf(value);
    var result1 = arr.lastIndexOf(4);
    console.log(result1);//控制台输出4
    var result2 = arr.lastIndexOf(43);
    console.log(result2);//控制台输出-1
    
    var arr=[1,2,4,23,4,5,7,3];//定义数组
    //两个参数的lastIndexOf方法调用:arr.lastIndexOf(searchValue,fromIndex);
    var result3 = arr.lastIndexOf(3,4);//从索引4开始向前找元素3首次出现时的索引
    console.log(result3);//控制台输出-1
    var result4 = arr.lastIndexOf(6,4);//从索引4开始向前找元素6首次出现时的索引
    console.log(result4);//控制台输出-1

注意:元素定位方法在定位比较时采用的是===比较,而不是==比较。从下例可以看出:

var t=[1,2,3,0];
t.indexOf(true);//返回false

二、元素迭代方法(循环)

  1. every:循环遍历数组的所有元素,并执行相应的方法同时返回一个值,如果所有的都返回true则为true,否则为false。

    //例如:需要判断一个数字数组的每一项是否都大于2或者小于10
    var arr=[2,3,5,6,7];
    var result = arr.every(function(item,index,array){
        return item>2;
    })
    var result1 = arr.every(function(item,index,array){
        return item<10;
    })
    console.log(result);//控制台输出:false
    console.log(result1);//控制台输出:true
  2. filter:过滤数组的元素,所以符合条件的元素组成数组并返回

    //例如:数字数组中需要返回所有大于4的数
    var arr=[2,3,5,6,7];
    var result = arr.filter(function(item,index,array){
        return item>4;
    })
    console.log(result);//控制台输出:[5,6,7]
  3. forEach:循环数组的每一项,并执行一个方法

    //输出每一个数字
    var arr=[2,3,5,6,7];
    var result = arr.forEach(function(item,index,array){
        console.log(2);
    })
  4. map:遍历循环数组的所以元素,每一个元素执行一个方法,并把执行结果组成一个新的数组返回

    //数字数组的每一项翻倍
    var arr=[2,3,5,6,7];
    var result = arr.map(function(item,index,array){
        return item*2;
    })
    console.log(result);//控制台输出:[4, 6, 10, 12, 14]
  5. some:和every方法相反,自己尝试练习一下吧

三、缩小方法

  1. reduce:reduce()方法接收一个函数callbackfn作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。

    • 语法:array.reduce(callbackfn,[initialValue])
    • 参数:reduce()方法接收callbackfn函数,而这个函数包含四个参数:function callbackfn(preValue,curValue,index,array){}
      preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue)
      curValue: 数组中当前被处理的数组项
      index: 当前数组项在数组中的索引值
      array: 调用 reduce()方法的数组
      initialValue作为第一次调用 callbackfn函数的第一个参数。
    //未设置initialValue值时
    var arr = [0,1,2,3,4];
    arr.reduce(function (preValue,curValue,index,array) {
        return preValue + curValue;
    });//结果返回:10
    
    //设置initialValue=5时
    var arr = [0,1,2,3,4];
    arr.reduce(function (preValue,curValue,index,array) {
        return preValue + curValue;
    },5);//结果返回:15
  2. reduceRight:和reduce的作用基本相同,只不过操作方向相反,是从右到左。

    总结:ECMA5为数组提供的新方法还是很实用的,而且实现也非常简单,有兴趣的可以去翻查一下相应方法的源码,没兴趣的可以记下来,以备不时之需。希望对大家有所帮助。

猜你喜欢

转载自blog.csdn.net/jingsi1991/article/details/52685495