JavaScript基础--es6新增的数组方法

2023-11-11

今天给大家介绍一些es6新增的常用数组方法。

1. 映射数组 map()方法

目的:为了操作原数组,但不改变原数组的值

作用:map() 方法返回一个新数组,数组中的元素原始数组元素调用函数处理后的值,不会对空数组进行检测

返回值: 新数组,一定和原始数组长度一样,不改变原数组

格式:数组.map(function(item,index,arr) { })

          ① item 数组的每一项(元素)
          ② index 数组的每一项下标(索引号)
          ③ arr 当前元素所在的数组

1.1 实例操作

let arr = [1, 2, 3, 4];
let narr = arr.map(function(item, index, arr) {
    console.log(item, index, arr); // 输出内容分别为数组元素,下标,原数组
    return item + 10;  // 对原数组元素进行加10操作,这样原来的数组元素的值都会加10
})
console.log(narr);  // [11, 12, 13, 14]  新数组元素的值比原数组都大10
console.log(arr);   // [1, 2, 3, 4]  不改变原数组

注意:

map()方法里面是是函数,这个函数有3个形参item,index,arr,分别代表数组的每一个元素、对应元素的下标、当前操作的数组。实际运用中可以根据需要使用形参,不需要的可以不写,arr这个参数很少使用,所以基本不写。

② 要使用return 返回操作的结果

2. 过滤数组 filter() 方法

作用:filter() 方法是过滤原数组中的数据,把满足条件的放在新数组中

返回值:新数组,里面是所有原始数组中满足条件的项, 不改变原数组

格式:数组.filter(function(item,index,arr) { })

          ① item 数组的每一项(元素)
          ② index 数组的每一项下标(索引号)
          ③ arr 当前元素所在的数组

2.1 实例操作

let arr = [1, 2, 3, 4, 5];
let filter1 = arr.filter(function(item, index, arr) {
    return item > 2; // 返回满足条件的数组元素,并存入新数组
})
console.log(filter1);  // [3, 4, 5]

过滤数组filter() 方法和映射map() 方法用法相似,唯一不同的是该方法返回的是满足条件的原数组的元素,并存入新数组,如果没有满足条件的元素,则返回一个空数组。

3. some() 方法  和  every() 方法

3.1 some() 方法

作用:some() 方法  用于检测数组中的元素是否有某些满足指定条件(通过函数提供)

返回值:是一个布尔值

             ① 有满足条件的,返回true
             ② 没有满足条件,返回false

格式:数组.every(function(item,index,arr) { })

             ① item 数组的每一项(元素)
             ② index 数组的每一项下标(索引号)
             ③ arr 当前元素所在的数组

3.2 some()方法实例操作

let arr = [1, 2, 3, 4, 5];
let some1 = arr.some(function(a, b, arr) { // a表示数组元素,b表示数组元素下标
    return a > 4;  // 检测是否有满足大于4的元素,如果有返回true, 没有返回false
})
console.log(some1);  // true  因为存在元素5满足条件,所以为true

some()方法的用法和前面两种方法类似,区别在于返回值,这里的返回值是boolean值,存在满足条件的为true,不存在则为false。

3.3  every() 方法

作用:every() 方法  用于检测数组所有元素是否都符号指定条件(通过函数提供)

返回值:是一个布尔值

              ① 有满足条件的,返回true
              ② 没有满足条件,返回false

格式:数组.every(function(item,index,arr) { })

              ① item 数组的每一项(元素)
              ② index 数组的每一项下标(索引号)
              ③ arr 当前元素所在的数组

3.4  every() 方法实例操作

let arr = [1, 2, 3, 4, 5];
let every1 = arr.every(function(a, b, arr) {  // a表示数组元素,b表示数组元素下标
    return a > 4;  // 检测是否数组中所有元素都满足大于4,如果是返回true, 不是返回false
}) 
console.log(every1); // false   因为不是所有元素都满足条件,所以为false

3.5 some()方法 和 every() 方法的区别:

some() 方法用于判断数组中某一个元素,只要存在有元素满足条件即为true;

every() 方法用于判断数组中所有元素,必须所有元素满足条件才为true.

4. fill() 方法

作用:fill() 方法使用指定数据填充数组,并且替换对应的元素(简言之是替换内容

前提:数组要有length

返回值:填充好的数组(新数组),改变原数组

格式:数组.fill(要填充的数据,开始索引,结束索引);

              ① 要填充的数据:用什么数据填充数组里面的每一位
              ② 开始索引:从哪一个下标开始,默认值是0
              ③ 结束索引:填充到哪一个下标位置结束,默认是到 末尾,包前不包后

4.1 实例操作     

let arr = [1, 2, 3, 4, 5];
arr.fill('a', 2, 4);  
console.log(arr); // 1,2,a, a, 5   要头不要尾,即从而2开始到4结束,但是4这个元素不被填充替换

let arr1 = [1, 'string', 'null', 'true', null, true];
arr1.fill('b', 3);  // 两个参数,则默认填充替换到最后
console.log(arr1);  // [1, "string", "null", "b", "b", "b"]

arr1.fill('c', 3, 10);  // 结束索引超过数组长度不替换,直接忽略
console.log(arr1);   // [1, "string", "null", "c", "c", "c"]

5. copyWithin() 方法

作用:copyWithin() 方法  使用数组里面的内容替换数组里面的内容(简言之是替换内容,但是只能使用自身元素替换)

格式:数组.copyWithin(目标位置,开始索引,结束索引);

                  ① 目标位置:当你替换内容的时候,从哪一个索引位置开始替换
                  ② 开始索引:数组中哪一个索引位置开始当作替换内容,默认值是0
                  ③ 结束索引:数组中哪一个索引位置结束当作替换内容,默认是末尾,包前不包后

5.1 实例操作

let arr = [1, 2, 3, 4, 5];
arr.copyWithin(2, 3, 4); // 表示从索引2开始替换,从索引3开始作为替换内容,直到索引4结束,但是不包括索引4的值,即这里只有4被作为替换内容,替换索引2的值
console.log(arr); // [1, 2, 4, 4, 5]  

let arr1 = [1, 'string', 'null', 'true', null, true];
arr1.copyWithin(2);  // 只有一个参数时,则表示开始替换的位置,那么替换的内容从下标为0开始依次往后,直到最后一个元素被替换为止
console.log(arr1);  // [1, "string", 1, "string", "null", "true"]

注意:替换值有几个,那么被替换的值就有几个,比如上述第一个数组arr中,替换内容只有4,那么就只能替换索引2这一个元素为4;而第二个数组arr1中,默认替换内容为从索引0开始到末尾,而替换位置从索引2开始,那么替换内容的个数大于被替换的值的个数,因此,可以把从索引2开始,后面的值全部替换一遍。

6. find() 方法  和  findIndex() 方法

6.1 find()方法

作用:find() 方法通过测试(函数内判断)查找到数组中第一个满足条件元素

返回值:返回查找到的那个数据,如果找不到则返回undefined

格式:数组.find(function(item,index,arr) { });

              ① item 数组的每一项(元素)
              ② index 数组的每一项下标(索引号)
              ③ arr 当前元素所在的数组

6.2 find()方法实例操作

let arr = [1, 2, 3, 4, 5];
let find = arr.find(function(a, b, c) {
    return a <= 5;  //这句表示返回满足条件a<=5的元素
})
console.log(find);  // 1  但是find()方法只返回满足条件的第一个元素

注意:如果有多个满足条件的元素,只返回满足条件的第一个元素。

6.3  findIndex() 方法

作用:findIndex() 方法通过测试(函数内判断)查找到数组中第一个满足条件元素下标

返回值:查找到的那个数据的下标,如果找不到返回-1

格式:数组.findIndex(function(item,index,arr) { }) 

             ① item 数组的每一项(元素)
             ② index 数组的每一项下标(索引号)
             ③ arr 当前元素所在的数组

6.4 findIndex() 方法实例操作

let arr = [1, 2, 3, 4, 5];
let findIndex = arr.findIndex(function(a, b, c) {  // a表示数组元素,b表示元素下标,c表示数组
    // return a == 0;   //  表示找出数组元素为0的元素下标,由于找不到,所以返回-1
    return a == 2;      // 表示找出数组元素为2的元素下标
})
console.log(findIndex);  // 返回下标1

注意:findInde()方法的作用和indexOf()方法类似,都是可以获取到指定条件的第一个元素的下标,如果找不到,则返回-1。但是二者的用法不一样,要注意区分。

7. flat() 方法 和 flatMap() 方法

这两个方法都是用于拍平数组的,所谓拍平数组是原数组里面的元素又是一个数组,即数组嵌套数组,这时使用该方法可以让数组变成一维的,即数组元素不再是数组形式。

7.1 flat() 方法

作用:  flat() 方法是拍平数组(就是整理原数组的元素, 然后放在一个新的数组中)

返回值: 拍平以后的数组

语法: 数组.flat(数字)

            数字: 表示扁平化多少层, 默认是1, 可以填其他正整数,也可以填Infinity(无穷大)

7.2 flat() 方法实例操作

// arr这个数组里面的元素又是数组,称为二维数组
let arr = [
    [1, 2, 3],
    ['a', 'b'],
    [4, 5, 6]
]
// 使用flat()方法可以让arr数组元素不再是数组
let flat1 = arr.flat(); // 不填数字,默认拍一层
console.log(flat1);   //[1, 2, 3, "a", "b", 4, 5, Array(2), Array(2)]

let arr1 = [
            [1, 2, 3],
            ['a', 'b'],
            [4, 5, [6, 7],
                [8, 9]   //数组元素中又嵌套数组,即arr1变为了三维数组
            ]
        ]
let flat2 = arr1.flat(1);  // 数字为1,表示拍1层,由于原始是三维数组,所以无法全拍平
console.log(flat2);   // [1, 2, 3, "a", "b", 4, 5, 6]

注意:使用flat()方法要起效果的前提条件是:数组是个多维数组,不然无需拍平。如果是n维数组,要想全拍平,则数字需要填 n-1 ,如果嫌弃计算麻烦,直接填Infinity即可

7.3  flatMap() 方法

作用: flatMap() 方法 ,拍平数组,但只能拍一层,并且一边拍平,一边映射;也可以一边拍平,一边过滤

返回值: 一个新数组

语法: 数组.flatMsp(function(item,index,arr) { })

7.4 flatMap() 方法实例操作

let arr2 = [
    [1, 2, 3],
    ['a', 'b', [22, 33, 'tre']],
    [4, 5, 6]
]
let narr = arr2.flatMap(function(a, b, c) {
    return a.map(function(a, b, c) {  // 一边拍平,一边映射,对值进行映射
        return a + 2;  // 映射得到的数组比原数组的值大2
     })
  
});
console.log(narr); // [3, 4, 5, "a2", "b2", "22,33,tre2", 6, 7, 8]

注意: flatMap() 方法不仅可以实现拍平(只拍平一层),而且可以同时进行映射数组。

8. reduce() 方法

作用:reduce() 方法 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减最终计算为一个值。

格式:数组.reduce(function(prev,currentValue,currentIndex,arr) { },初始值)

             ① prev:表示数组的第一个元素
             ② currentValue:表示数组的第二个元素
             ③ currentIndex:表示数组的第二个元素下标 
             ④ arr:表示整个数组

8.1 实例操作

// 使用for循环对数组元素的值进行累加求和
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum = 0;
for (var i = 0; i < arr.length; i++) {
    sum += arr[i];
}
console.log(sum);  // 45

// 没有初始值
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum1 = arr1.reduce(function(a, b, index, arr1) {
     return a + b;
})
console.log(sum1);  // 45


// 有初始值,相当于在累加之前有个初始值
let sum2 = arr1.reduce(function(a, b) {  // 用不上的形参可以省略不写
    return a + b;
}, 11)
console.log(sum2);  // 56, 相当于初始值+数组元素累加和=11+45=56

通过以上方法的介绍,可以看出新增方法基本上都和函数结合使用,所以对函数的知识点要非常通透,这样再理解这些方法就会轻松许多,方法很多,适合自己的就是最好的,不一定都要记住,只要知道有该方法,明白作用即可。到时需要的时候再去网站上查找具体用法就行。

网址为:MDN Web Docs (mozilla.org),可以自行查找各种方法的用法。

           

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript基础--es6新增的数组方法 的相关文章

随机推荐

  • 华为主题包hwt下载_hwt主题文件下载猫和老鼠

    hwt主题文件下载猫和老鼠app是一款针对华为手机精心设定的一款主题软件 软件主题是以经典的猫和老鼠动态图为主 各种不同风格的搞笑图片可以任意下载使用 当它们出现在你的手机屏保上时 让你聊天时更开心 设置方法比较简单 会有相关的教程 hwt
  • 动画的应用,西游记动画效果

    实现背景向后移动以及人物走路的动画效果 实现代码如下
  • AngularJS(13)-包含

    AngularJS 包含 使用 AngularJS 你可以使用 ng include 指令来包含 HTML 内容 实例
  • WIN10下搭建gcc编译环境

    安装make 1 下载make 3 81 链接 https pan baidu com s 1kj2CzmLvl tDTuHJRXKnBg 提取码 v7fh 2 直接安装 全选next 安装路径最好不要改动 3 进入系统属性 选择环境变量
  • 合天Weekly第二十一周

    分析代码可以看出是sql注入 首先使用order by 看下有几列 这里空格被过滤使用 绕过 当输入4的时候不回显所以为3列 提示flag在 falg 表里构造payload 1 union select 1 flag 3 from fla
  • mybatis.type-aliases-package的作用和用法

    第一种在mapper xml文件中的resultMap的type或者parameterType会用到自定义的POJO 其中resultType User 中 User就是自定义的POJO 此时可以使用完全限定名来指定这些POJO的引用 第二
  • lambda 和 Predicate 的妙用示例

    1 过滤集合数据的多种常用方法 public class DemoTest1 public static void main String args List
  • 数据挖掘和机器学习之间,主要有什么区别和联系?

    数据挖掘和机器学习的区别和联系 周志华有一篇很好的论述 机器学习和数据挖掘 可以帮助大家理解 数据挖掘受到很多学科领域的影响 其中数据库 机器学习 统计学无疑影响最大 简言之 对数据挖掘而言 数据库提供数据管理技术 机器学习和统计学提供数据
  • 手势识别Python-OpenCV

    目录 一 选题背景 5 二 设计理念 5 2 1 搭建平台 5 2 2 问题描述 5 2 3 过程概述 6 三 过程论述 6 3 1 数据集生成 6 3 1 1 标准化图片的采集 6 3 1 2肤色检测 7 3 1 3 特征提取 8 3 1
  • Linux系统基础命令

    Linux系统常用基本命令 ls 查看当前目录下所有文件 注 蓝色 文件夹 白色 普通文件 绿色 拥有执行权限的文件 红色 压缩文件 touch 示例 touch filename txt 在当前目录下创建一个文件 注 文件名区分大小写 文
  • 【LeetCode】83. 删除排序链表中的重复元素

    83 删除排序链表中的重复元素 简单 方法 一次遍历 思路 由于给定的链表是排好序的 因此重复的元素在链表中出现的位置是连续的 因此我们只需要对链表进行一次遍历 就可以删除重复的元素 从指针 cur 指向链表的头节点 随后开始对链表进行遍历
  • 【时间序列数据挖掘】ARIMA模型

    目录 0 前言 一 移动平均模型MA 二 自回归模型AR 三 自回归移动平均模型ARMA 四 自回归移动平均模型ARIMA 总结 0 前言 传统时间序列分析模型 ARIMA模型是一个非常灵活的模型 对于时间序列的好多特征都能够进行描述 比如
  • MYSQL数据库测评及整改

    1 查询数据库版本 select version 2 查询已安装的插件 show plugins 3 查询插件安装的位置 show variables like plugin dir 4 查询用户 选择数据库 select host use
  • 阿里云OCR图片识别

    阿里云OCR图片识别 请求参数 Body 请求示例 java 正常返回示例 错误码定义 阿里云OCR图片识别 单字识别 表格识别 旋转功能 准备条件 阿里云OCR图片识别API购买 初次购买1分钱500次接口调用 请求参数 Body 图像数
  • Java多线程——为什么弃用stop、suspend、resume方法

    初始的Java版本定义了一个stop方法用来终止一个线程 以及一个suspend方法用来阻塞一个线程直至另一个线程调用resume stop和suspend方法有一些共同点 都试图控制一个给定线程的行为 stop suspend和resum
  • 利用Python写Api

    初学者 仅作笔记参考 因为没使用web框架 采用的原生sql进行数据查询有点呆板 from mysql Database import Demo from utils tools import Tools import flask json
  • 运行快捷指令_iOS 13 快捷指令无法运行的解决办法

    升级 iOS13 以后 快捷指令 App 也迎来全新版本 新设计的快捷指令 App 有诸多不同 尤其在权限控制上更为严格 这导致部分快捷指令打开时报错的问题 首次添加快捷指令规则后 运行时提示 无法打开 XXX 这个问题其实很容易解决 方法
  • linux 下 redis 设置密码

    在服务器上 这里以linux服务器为例 为redis配置密码 1 第一种方式 当前这种linux配置redis密码的方法是一种临时的 如果redis重启之后密码就会失效 1 首先进入redis 如果没有开启redis则需要先开启 root
  • matlab函数结果,从Matlab函数返回多个输出变量

    一些选择 添加一个参数以指定控制台的详细输出 但默认情况下将其设置为false function A B C test x y z verbose if nargin 3 verbose false end A 2 x B 2 y C 2
  • JavaScript基础--es6新增的数组方法

    今天给大家介绍一些es6新增的常用数组方法 1 映射数组 map 方法 目的 为了操作原数组 但不改变原数组的值 作用 map 方法返回一个新数组 数组中的元素为原始数组元素调用函数处理后的值 不会对空数组进行检测 返回值 新数组 一定和原