当前位置: 首页 > news >正文

ES6的数组方法详解(ES5新增)

ES6的数组方法

ES5定义了六个新的数组方法来遍历,映射,过滤,简化和搜宿舍数组

1.forEach()

forEach()方法从头至尾遍历数组,为每个元素调用指定的函数,它有三个参数:数组元素、元素的索、数组本身

var data = [1,2,3,4,5]
var sum = 0
data.forEach(function(val){
	sum += value
})
sum //15
data.forEach(function(v,i,a){
	a[i] = v + 1
})
data // [2,3,4,5,6]

2.map()

map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该返回值【传递给map的函数应该有返回值。map返回的新数组,他不修改调用的数组】

var a = [1,2,3]
var b = a.map(function(j){
	return x*x
})
data //[1,4,9]

3.filter()

filter()返回的数组元素是调用数组的一个子集。传递的函数是用来逻辑判定的:该函数的返回true或false。如果返回值是true,那么传递给判定函数的元素就是个子集的成员,它将被叫到一个返回值的数组中

var a = [5,4,3,2,1]
var arr  = a.filter(function(x){
	return x < 3
)
arr //[2,1]
var array  = a.filter(function(x.j){
	//x为每个元素
	//i为该元素的下标
	return i % 2 == 0
})
array //[5,3,1]

4.every()

是对数组元素应用指定的函数进行判断,返回true或false
every()针对所有的意思吧,当且仅当针对数组所有元素调用判定函数都返回true,它才返回true

var a = [1,2,3,4,5]
a.every(function(x){return x < 10}) // true
a.every(function(j){return x % 2 ==== 0}) //false

5.some()

和every()一样是对数组元素应用指定的函数进行判断,返回true或false
"存在"的意思,当数组中至少有一个元素调用判断返回true,他就返回true;当且仅当数值中所有元素中所有的元素调用判断函数都返回false,它才返回false

var a = [1,2,3,4,5]
a.some(funciton(x){return x % 2 === 0}) //true
a.some(isNaN) //false:a不包含非数值元素

注意:一旦every()和some()确认范围什么值他们就会停止遍历数组元素。
some()在判断函数第一次返回true后就返回true,但如果判断函数一直返回false,他将会遍历整个数组
every()恰好相反:他在判断函数第一次返回falsej就会返回false,但如果判断函数一直返回true,他将会遍历整个数组

6.indexOf()和lastIndexOf()

他们搜索整个数组中具有给定值得元素,返回找到的第一个元素的索引或者没有找到就返回-1。indexOf()从头至尾搜索,而lastIndexOf()则反向搜索。
它们不接受一个函数作为其参数。第一个参数是需要搜索的值。第二个参数是可选的的:它指定数组中的一个索引,从哪里开始搜索,第二个参数,可以为负数,它代表相对数组末尾的偏移量。

a = [0,1,2,1,0]
a.indexOf(1) //1
a.lastIndexOf(1) //3
a.indexOf(3) // -1

兼容旧环境(Polyfill)

map 是在最近的 ECMA-262 标准中新添加的方法;所以一些旧版本的浏览器可能没有实现该方法。在那些没有原生支持 map 方法的浏览器中,你可以使用下面的 Javascript 代码来实现它。所使用的算法正是 ECMA-262,第 5 版规定的。假定Object, TypeError, 和 Array 有他们的原始值。而且 callback.call 的原始值也是 Function.prototype.call

// 实现 ECMA-262, Edition 5, 15.4.4.19
// 参考: http://es5.github.com/#x15.4.4.19
if (!Array.prototype.map) {
  Array.prototype.map = function(callback, thisArg) {

    var T, A, k;

    if (this == null) {
      throw new TypeError(" this is null or not defined");
    }

    // 1. 将O赋值为调用map方法的数组.
    var O = Object(this);

    // 2.将len赋值为数组O的长度.
    var len = O.length >>> 0;

    // 3.如果callback不是函数,则抛出TypeError异常.
    if (Object.prototype.toString.call(callback) != "[object Function]") {
      throw new TypeError(callback + " is not a function");
    }

    // 4. 如果参数thisArg有值,则将T赋值为thisArg;否则T为undefined.
    if (thisArg) {
      T = thisArg;
    }

    // 5. 创建新数组A,长度为原数组O长度len
    A = new Array(len);

    // 6. 将k赋值为0
    k = 0;

    // 7. 当 k < len 时,执行循环.
    while(k < len) {

      var kValue, mappedValue;

      //遍历O,k为原数组索引
      if (k in O) {

        //kValue为索引k对应的值.
        kValue = O[ k ];

        // 执行callback,this指向T,参数有三个.分别是kValue:值,k:索引,O:原数组.
        mappedValue = callback.call(T, kValue, k, O);

        // 返回值添加到新数组A中.
        A[ k ] = mappedValue;
      }
      // k自增1
      k++;
    }

    // 8. 返回新数组A
    return A;
  };      
}

相关文章:

  • 【转载】CSS 入门精要(四)
  • ES6新增数组方法
  • 心情随笔
  • includes()方法和indexOf()方法数组去重
  • KVM之网桥创建(ubuntu 环境)
  • orcale创建临时表空间,表空间,创建用户
  • 事件监听
  • Google Guava14.0 瓜娃学习笔记
  • 前端实现图片懒加载(lazyload)的两种方式
  • axios封装,api接口封装统一管理
  • Bzoj1208 [HNOI2004]宠物收养所
  • 关于虚拟DOM和Diff算法的理解及应用场景
  • python selenium webdriver入门基本操作
  • 对ChemDraw Prime 16.0你了解多少
  • vue项目打包上线的流程
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android开源项目规范总结
  • golang中接口赋值与方法集
  • Js基础知识(四) - js运行原理与机制
  • Lsb图片隐写
  • python_bomb----数据类型总结
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • supervisor 永不挂掉的进程 安装以及使用
  • swift基础之_对象 实例方法 对象方法。
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 解析带emoji和链接的聊天系统消息
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 人脸识别最新开发经验demo
  • 温故知新之javascript面向对象
  • 我有几个粽子,和一个故事
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 正则表达式
  • 正则学习笔记
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT(一种朴素的计算器实现方法)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (编译到47%失败)to be deleted
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (七)c52学习之旅-中断
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .Net Core与存储过程(一)
  • .net FrameWork简介,数组,枚举
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net对接阿里云CSB服务
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/sudoers (root权限管理)
  • @Responsebody与@RequestBody