JavaScript笔记6-数组新方法

七.ECMAScript5关于数组的新方法

1.forEach():遍历数组,并为每个元素调用传入的函数;
     举例:

  1  var a = [1,2,3];
  2      var sum = 0;
  3      //传一个参数
  4     a.forEach(function(v){
  5          sum += v;
  6      });
  7      console.log(sum);//6
  8      //传三个参数(元素值,索引,数组本身)
  9      a.forEach(function(v,i,a){
 10          a[i]=v+1;//为数组的各元素自加1
 11      })
 12      console.log(a);//[2,3,4]

2.map():将调用该函数的数组的每个元素都传入指定函数,并返回运算后的新数组;

注意:该函数不修改原数组.

举例:

  1 var a = [1,2,3];
  2 var b = a.map(function(x){
  3      return x*x;
  4  })
  5  console.log(b);//[1,4,9]

3.filter():将调用该函数的数组的每个元素传入指定函数进行判定,若判定为true,则返回.最终返回一个符合指定条件(函数)的元素的集合(该集合为原数组的子集)

注:该函数会跳过稀疏数组中缺少的元素,总是返回稠密数组,利用此特性可以压缩稀疏数组.
     举例1:

  1  var a = [1,2,3];
  2      var c = a.filter(function(x){
  3          return x<3;
  4      })
  5      console.log(c);

举例2:

  1  var a = [ ,1,null,3,4, ,];
  2      console.log(a.length);//6
  3      var dense = a.filter(function(){
  4          return true;//过滤掉undefined
  5      });
  6      console.log(dense);//[1,null,3,4]
  7      console.log(a);//Array(6) […, 1, null, 3, 4]未改变原有数组
  8     var c = a.filter(function(x){
  9      return x!=undefined && x != null;
 10      });
 11      console.log(c);//Array(3) [1, 3, 4]

4.every():遍历调用该方法数组的每个元素,判定是否符合指定条件(函数),全部符合则返回true;注意空数组调用时返回true;

some():遍历调用该方法数组的每个元素,判定是否符合指定条件(函数),只要有一个符合则返回true;注意空数组调用时返回false;
     举例1:

  1  var a = [1,2,3,4,5];
  2      var b = a.every(function(x){
  3         return x >0;//判定是否所有元素均大于0
  4      });
  5      console.log(b);//true
  6      var c = a.some(function(x){
  7          return x < 4; //判定是否有元素小于4
  8      });
  9      console.log(c);//true

举例2:空数组调用

  1 var d = [];
  2      console.log(d.every(function(x){
  3          return x;
  4      }));//true
  5      console.log(d.some(function(x){
  6          return x;
  7      }));//false

5.reduce()和reduceRight()

使用指定的函数对数组元素进行组合,生成单个值.指定函数需要两个值(第一个是执行化简操作的函数;第二个(可选)是传递给函数的初始值)

注意:1)无第二个参数时,函数会调用数组的第一个元素作为初始值,若数组为空数组则报"类型错误"异常;

2)若数组只有一个元素,并且未提供第二个参数,则不会调用函数,只是返回该唯一元素;

举例1:

  1 var a = [1,2,3,4,5];
  2  //求和
  3 var sum = a.reduce(function(x,y){
  4      return x+y;
  5  },0);
  6  console.log(sum);//15
  7  //求积
  8 var mul = a.reduce(function(x,y){
  9      return x*y;
 10  },1)
 11  console.log(mul);//120
 12  //求最大值
 13 var max = a.reduce(function(x,y){
 14      return x>y?x:y;
 15  },0)
 16  console.log(max);//5

举例2:幂运算

  1 var a = [2,3];
  2 var big = a.reduceRight(function(x,y){
  3      return Math.pow(y,x);
  4  });
  5  console.log(big);//2^3=8
  6
  7 var big1 = a.reduceRight(function(x,y){
  8      return Math.pow(x,y);
  9  });
 10  console.log(big1);//3^2=9
 11 

6.indexOf()和lastIndexOf()

返回给定索引值的元素,lastIndexOf()从右往左搜索;若没有找到,则返回-1;

注意:该函数可接收两个参数,第一个参数为需要搜索的索引;第二个为开始搜索的位置(可选);两个参数都不为函数;

举例:定义一个函数,查找数组中所有出现的x,并返回包含所有索引的数组

  1 function findall(a,x){
  2      var results = [];    //定义空数组,用来接收x的索引值
  3     len = a.length;    //搜索的最大长度
  4     pos = 0;    //开始搜索的位置
  5     while(pos<len){
  6          pos = a.indexOf(x,pos); //从pos开始搜索x
  7          if(pos === -1){
  8              break;    //找不到就返回
  9         }
 10          results.push(pos);//存储索引值
 11         pos = pos+1;
 12      }
 13      return results;
 14  }
 15 测试
 16 var a = [1,2,3,2,4];
 17  console.log(findall(a,2));//Array(2) [1, 3]

八.判定是否为数组

Array.isArray():判定是否为数组类型,是则返回true;

九.字符串可以作为只读的数组

可以使用方括号([])访问单个字符;

也可以作用charAt()方法

举例:

  1 var s = test;
  2  s.charAt(0);//"t"
  3  s[0];//"t"

十:需求:将完全由数字组成的字符串转为数字类型,如"1345"转为1345

法一:

  1 ‘use strict‘;
  2  function string2int(s){
  3      //将s转为字符串数组
  4     var str = s.split(‘‘);
  5      //调用map()将字符串数组转为数字数组
  6     var arr = str.map(function(x){
  7          //字符-0即可变为数字
  8         return x-0;
  9      })
 10      //调用reduce(),将数字数组转为int类型
 11     var res = arr.reduce(function(x,y){
 12         return x*10+y;
 13      })
 14      //返回结果
 15     return res;
 16  }

法二:

  1 ‘use strict‘;
  2 var b = "1345";
  3  //split():将字符串转为字符类型的数组
  4 var c = b.split(‘‘);
  5  //与0做减法运算,将字符类型转为数字类型
  6 var d = [];
  7  for(var i= 0;i<c.length;i++){
  8      d[i]=c[i]-0;
  9  }
 10  //转为整型
 11 var e = d.reduce(function(x,y){
 12      return x*10+y;
 13  })
 14  console.log(e);
时间: 2024-10-23 08:31:46

JavaScript笔记6-数组新方法的相关文章

JavaScript ES6 数组新方法 学习随笔

JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var includes = arr.includes(2) map方法 map 遍历处理返回新数组 原数组不会改变 var map = arr.map(function (item) { return ++item }) reduce方法 reduce 遍历处理数组返回结果 prev与next中间的符号以

JavaScript中Array数组的方法

查找: indexOf.lastIndexOf 迭代:every.filter.forEach.map.somereduce.reduceRight 用法: 1 /* 2 1 查找方法: 3 * arr.indexOf( value ) 4 * 一个参数 返回value所在数组的位置下标 5 * 找不到的时候返回-1 6 * 7 * arr.indexOf( start , value ) 8 * 从start开始查找value 返回下标 9 * 找不到的时候返回-1 10 * 11 * arr

JavaScript笔记之数组 keyword(存储和释放&amp;堆栈 &amp; 按值 引用)

1.数组创建及初始化       var obj=new Array();       var arr=[];       可以延伸为长度一定的,字面量定义数组 2.堆栈 按值传递 引用类型      数组是引用类型,不是值传递,      栈:系桶自动分配和释放 ,比如函数的参数.局部变量 先进后出 一级缓存      堆:一般由程序员分配释放,程序结束后系统回收 先进先出 二级缓存 3.关联数组和索引数组    关联数组即hash数组,本质上js底层,一切对象都是关联数组 所以以下写法能产生

JavaScript中清空数组的方法

方法一 var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 输出 [],空数组,即被清空了 方法二 int[] ary = {1,2,3,4}; ary.length = 0; 方法三 var ary = [1,2,3,4]; ary = []; // 赋值为一个空数组以达到清空原数组 方法三效率最好

JavaScript中遍历数组的方法

for循环 1 let arr=["A","B","C","D","E","F"]; 2 for(let i=0;i<arr.length;i++){ 3 console.log(arr[i]); 4 } for...of 遍历出数组中的每个值 1 let arr=["A","B","C","D",&q

JS 数组及其方法浅析

近来闲来无事,小码哥突发奇想,手一哆嗦,就把javascript中的数组及其方法小小总结了一下! 在JS里我们很抽象的理解万物皆对象,这大概也是,我们现在在写Js代码的时候,都善于用面向对象的方式写程序的根由吧....不多说,数组Array也是对象无疑了! 首先,我们肯定应该知道什么是数组?其又是如何定义的?都有哪些优点?这都是我们关心的,,, 数组定义:数组说白了就是数据的集合,在内存中,是一块连续内存的地址:JS中数组分为一维数组和多维数组. 定义方式: 1.直接量定义:var Arr=[e

JavaScript学习笔记:数组reduce()和reduceRight()方法

很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: var arr = [1,2,3,4,5,6]; Array.prototype.sum = function (){ var sumResult = 0; for (var i = 0; i < this.length; i++) { sumResult += parseInt(this[i]);

[Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法

前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数arguments对象.它是一个类数组对象,并不是一个标准的数组,所以无法使用数组原型中的方法,因此无法使用arguments.forEach这样的形式来遍历每一个参数.这里我们必须使用call方法来对使用forEach方法. function highlight(){ [].forEach.call(argume

javascript数组原型方法

1.javascript数组原型方法. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jstest</title> 6 </head> 7 <body> 8 <script> 9 var arr = ["1","2&q