JS数组常用的20种方法详解(每一个方法都有例子,超全面,超好理解的教程,干货满满)

目录

1.会改变原数组的方法(7种)

1.push()

2.pop()

3.unshift()

4.shift()

5.reverse()

6.sort()

7.splice()

2.不改变原数组的方法(13种,返回的新数组是从原数组浅拷贝来的)

1.concat()

2.join()

3.slice()

4.indexOf()

5.forEach()

6.map()

7.filter()

8.every()

9.some()

10.find()

11.findIndex()

12.includes()

13.reduce()


  • 理解一个API最重要的是看它的作用,参数,返回值。
  • 每一个API这三个方面我都会先说明,并在后面的例子中体现出来。
  • 看完这篇文章,在写代码或者面试的时候你还只会那几种屈指可数的方法吗?
  • 赶快学起来吧!

1.会改变原数组的方法(7种)

1.push()

  • 作用:尾部添加元素
  • 参数:添加的元素
  • 返回值:操作完成后数组的长度
      let arr = [10, 20, 30, 40];let response = arr.push(20, 50);console.log(arr);console.log(response);

2.pop()

  • 作用:尾部删除一个元素
  • 参数:无
  • 返回值:删除的那个元素
      let arr = [10, 20, 30, 40];let response = arr.pop();console.log(arr);console.log(response);

3.unshift()

  • 作用:头部添加元素
  • 参数:添加的元素
  • 返回值:操作完成后数组的长度
      let arr = [1, 2, 3, 4];let response = arr.unshift(0, 1, "123", true, { a: 100 });console.log(arr);console.log(response);

4.shift()

  • 作用:头部删除一个元素
  • 参数:无
  • 返回值:删除的那个元素
      let arr = [1, 2, 3, 4];let response = arr.shift();console.log(arr);console.log(response);

5.reverse()

  • 作用:反转数组
  • 参数:无
  • 返回值:操作完成后的数组
      let arr = [1, 2, 3, 4];let response = arr.reverse();console.log(arr);console.log(response);

6.sort()

  • 作用:排序
  • 参数:无(默认从小到大排序)或函数
  • 返回值:操作完成后的数组
      let arr = [-1, 1, 5, 3, 4, 6, 2, 7];//默认let response = arr.sort();console.log(arr);console.log(response);//从小到大排序arr.sort((a, b) => {return a - b;});console.log(arr);//从大到小排序arr.sort((a, b) => {return b - a;});console.log(arr);

7.splice()

  • 作用:在指定索引处删除,添加元素
  • 参数:(索引,删除元素的个数,添加的元素)。第三个参数可选
  • 返回值:删除的元素(数组)
      let arr = [-1, 1, 5, 3, 4, 6, 2, 7];let response = arr.splice(2, 2);console.log(arr);console.log(response);let arr2 = [-1, 1, 5, 3, 4, 6, 2, 7];let response2 = arr2.splice(2, 0, 8);console.log(arr2);console.log(response2);

2.不改变原数组的方法(13种,返回的新数组是从原数组浅拷贝来的)

1.concat()

  • 作用:合并多个数组
  • 参数:(数组)
  • 返回值:返回一个新数组
      let arr = [1, 2, 3, 4, 5];let arr2 = ["zs", "ls", "ww", 1, 2];let res = arr.concat(arr2);console.log(arr);console.log(res);

2.join()

  • 作用:把数组转化成以指定分隔符连接的字符串
  • 参数:(分隔符,或无参数(默认的分隔符是' , '))
  • 返回值:字符串
      let arr = [1, 2, 3, 4, 5];let res = arr.join("--");let res2 = arr.join();console.log(arr);console.log(res);console.log(res2);

3.slice()

  • 作用:截取数组
  • 参数:(开始索引,结束索引)。截取的元素包括开始索引,不包括结束索引
  • 返回值:新数组
      let arr = [1, 2, 3, 4, 5];let res = arr.slice(1, 3);console.log(arr);console.log(res);

4.indexOf()

  • 作用:查找元素在数组中的索引
  • 参数:(查找的元素)
  • 返回值:索引值。数组中没有此元素则返回-1
      let arr = [1, 2, 3, 4, 5];let res = arr.indexOf(4);let res2 = arr.indexOf(6);console.log(arr);console.log(res);console.log(res2);

5.forEach()

  • 作用:遍历数组
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:无
      let arr = [1, 2, 3, 4, 5];let res = arr.forEach((item, index) => {console.log(item, "-", index);});console.log(arr);console.log(res);

6.map()

  • 作用:映射数组(必须通过return关键字来映射)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:新数组
      let arr = [1, 5, 3, 4, 6];let res = arr.map((item, index) => {let a = item + index;return a;});console.log(arr);console.log(res);

7.filter()

  • 作用:过滤筛选数组(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:新数组
      let arr = [1, 5, 3, 4, 6];let res = arr.filter((item, index) => {//第一种方式:// if (item >= 4) {//   return true;// }//第二种方式:return item >= 4;//两种方式效果都一样});console.log(arr);console.log(res);

8.every()

  • 作用:判断数组中每个元素是否都满足指定的条件(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:布尔值
      let arr = [1, 2, 3, 4, 5];let res = arr.every((item, index) => {return item > 0;});console.log(arr);console.log(res);let res2 = arr.every((item, index) => {return item > 3;});console.log(arr);console.log(res2);

9.some()

  • 作用:判断数组中是否有元素满足指定的条件(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:布尔值
      let arr = [1, 2, 3, 4, 5];let res = arr.some((item, index) => {return item > 2;});console.log(arr);console.log(res);let res2 = arr.some((item, index) => {return item > 5;});console.log(arr);console.log(res2);

10.find()

  • 作用:获取数组中满足指定条件的第一个元素(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:满足指定条件的第一个元素。没有满足条件的返回undefined
      let arr = [1, 2, 3, 4, 5];let res = arr.find((item, index) => {return item > 3;});console.log(arr);console.log(res);let res2 = arr.find((item, index) => {return item > 5;});console.log(arr);console.log(res2);

11.findIndex()

  • 作用:获取数组中满足指定条件的第一个元素的索引(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:数组中的每一项,每一项对应的索引)
  • 返回值:索引值。没有满足条件的元素则返回-1
      let arr = [1, 2, 3, 4, 5];let res = arr.findIndex((item, index) => {return item > 2;});console.log(arr);console.log(res);let res2 = arr.findIndex((item, index) => {return item > 5;});console.log(arr);console.log(res2);

12.includes()

  • 作用:判断数组中是否包含指定的元素
  • 参数:指定的元素
  • 返回值:布尔值
      let arr = [1, 2, 3, 4, "ab", "bd"];console.log(arr.includes(2));console.log(arr.includes(5));console.log(arr.includes("ab"));console.log(arr.includes("c"));

13.reduce()

  • 作用:对数组的元素进行叠加操作(必须要用return关键字)
  • 参数:函数(函数中依次传入的参数:前一次操作返回的值,当前项,当前项的索引),第二个参数(作为pre的初始值,可选)
  • 返回值:最后一次遍历return的值
      let arr = [1, 2, 3, 4, 5];//不传第二个参数:pre的初始值是数组第一个元素,cur是第二个元素,index从1开始let res = arr.reduce((pre, cur, index) => {console.log(pre, cur, index);return pre + cur;});console.log(res);//传第二个参数:pre的初始值是传入的第二个参数,cur是第一个元素,index从0开始let res2 = arr.reduce((pre, cur, index) => {console.log(pre, cur, index);return pre + cur;}, -1);console.log(res2);//应用1//计算数组中每个元素出现的次数let arr2 = [1, "b", 1, "a", "b", 1, 2];let num = arr2.reduce((pre, cur, index) => {if (cur in pre) {pre[cur]++;} else {pre[cur] = 1;}return pre;}, {});console.log(num);//应用2//对数组中对象里的属性进行累加let arr3 = [{subject: "math",score: 10,},{subject: "chinese",score: 20,},{subject: "english",score: 30,},];let sum = arr3.reduce((pre, cur, index) => {return pre + cur.score;}, 0);console.log(sum);

文章到这里就结束了,觉得有收获的可以点赞和收藏哦!也欢迎大家评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12个最佳WordPress投票插件

您是否正在为您的网站寻找WordPress投票插件? WordPress投票插件可让您轻松地在您的网站上进行民意调查,用户可以投票。这是在收集见解的同时建立用户参与度的有效策略。 在本文中,我们精心挑选了最好的WordPress投票插件,可帮助…

代码随想录算法训练营第五十二天|300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

文档讲解:代码随想录 视频讲解:代码随想录B站账号 状态:看了视频题解和文章解析后做出来了 300.最长递增子序列 class Solution: # 2516 ms, faster than 64.96%def lengthOfLIS(self, nums: List[int]) -> int:n len(nums)dp [1] * n…

从Discord的做法中学习 — 使用Golang进行请求合并

正如你可能之前看到的,Discord去年发布了一篇有价值的文章,讨论了他们成功存储了数万亿条消息。虽然有很多关于这篇文章的YouTube视频和文章,但我认为这篇文章中一个名为“数据服务为数据服务”的部分没有得到足够的关注。在这篇文章中&#…

QT项目移植到VS+QT(RTI-DDS)

QT中.pro文件中include(./xxx.pri) pri文件如下定义 unset(FILENAMES)for(FILENAME, FILENAMES) {HEADERFILE $$PWD/$${FILENAME}.hif(exists($$HEADERFILE)) {HEADERS * $$HEADERFILE}SOURCEFILE $$PWD/$${FILENAME}.cppif(exists($$SOURCEFILE)) {SOURCES * $$SOURCEFILE}…

CSS-鼠标属性篇

属性名:cursor 功能:设置鼠标光标的样式 属性值: pointer:小手move:移动图标text:文字选择器crosshair:十字架wait:等待help:帮助 eg.html{ cursor: wait;}(此处使用css改…

SpringBoot——MVC原理

优质博文:IT-BLOG-CN 一、SpringMVC自动配置 SpringMVC auto-configuration:SpringBoot自动配置好了SpringMVC。以下是SpringBoot对SpringMVC的默认配置:[WebMvcAutoConfiguration] 【1】包括ContentNegotiatingViewResolver和BeanNameView…

Keil工程打开发现目标芯片无法选择解决方案

买了一个开发板,配套有一些底层驱动的例程,打开后发现目标芯片无法选择,对应的下载Flash FLM文件也无法选择。从提示框中可以知道所提供的例程是Keil4的例程,我电脑上安装的Keil版本是Keil版本,估计是这个原因导致工程…

C# 执行Excel VBA宏工具类

写在前面 在Excel文档的自动化处理流程中,有部分值需要通过已定义的宏来求解,所以延伸出了用C# 调用Excel中的宏代码的需求。 首先要从NuGet中引入Microsoft.Office.Interop.Excel 类库 using Excel Microsoft.Office.Interop.Excel; 代码实现 /// &l…

HashMap,1.7与1.8的区别,HashMap的扩容方式有哪些

HashMap,1.7与1.8的区别 底层数据结构的区别 JDK 1.8之前: 1)JDK1.8 之前HashMap 底层是数组和链表结合在一起使用也就是链表散列。 2)HashMap 通过key 的hashCode 经过扰动函数处理过后得到hash 值,然后通过(n - 1&#xff09…

修改el-radio-group样式,自定义单选组件

修改el-radio-group样式,自定义单选组件 自定义组件 MyRadioGroup.vue <template><div class"btnsBox"><el-radio-group v-model"activeIndex" change"handleClick"><el-radio-buttonv-for"(item, index) in list&qu…

CSS3动画

在CSS3中新增了一个很有意思的东西&#xff0c;那就是动画&#xff0c;有了动画我们可以做很多的事情&#xff0c;让我为大家介绍一下动画吧&#xff01; 本篇文章关于介绍动画&#xff0c;利用小球移动为你们介绍一下动画 默认样式&#xff1a; <!DOCTYPE html> <ht…

普通话考试相关(一文读懂)

文章目录&#xff1a; 一&#xff1a;相关常识 1.考试报名时间 2.报名地方 费用 证件 3.考试流程 4.普通话等级说明 二&#xff1a;题型 三&#xff1a;技巧 1.前三题 2.命题说话 四&#xff1a;普通话考试题库 1.在线题库 2.下载题库 一&#xff1a;相关常识 …

JavaEE(SpringMVC)期末复习

文章目录 JavaEE期末复习一、单选题&#xff1a; JavaEE期末复习 一、单选题&#xff1a; 1.Spring的核⼼技术是&#xff08; A &#xff09;&#xff1f; A依赖注入 B.JdbcTmplate C.声明式事务 D.资源访问 Spring的核心技术包括依赖注入&#xff08;Dependency Injection&am…

【前端】js通过canvas获取浏览器的唯一指纹可以当做唯一标识

【前端】js通过canvas获取浏览器的唯一指纹可以当做唯一标识 <!DOCTYPE html> <html><head> <meta charset"utf-8" /> <meta name"viewport" content"widthdevice-width" /> <title>JS Bin</title> &…

解决Emmy Lua插件在IDEA或 Reder 没有代码提示的问题(设置文件关联 增加对.lua.txt文件的支持)

目录 Reder版本2019.x Reder版本2021.1.5x Reder版本2019.x 解决Emmy Lua插件在IDEA或 Reder 没有代码提示的问题(设置文件关联 增加对.lua.txt文件的支持) Reder版本2021.1.5x 解决Emmy Lua插件在IDEA或 Reder 没有代码提示的问题(设置文件关联 增加对.lua.txt文件的支持)…

java游戏制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt;import javax.sw…

Netty Review - 探索ByteBuf的内部机制

文章目录 概念ByteBuf VS Java NIO BufferByteBuf实现类HeapByteBuf vs DirectByteBufPooledByteBuf vs UnpooledByteBuf其他 ByteBuf的实现机制 概念 ByteBuf是Netty中用于处理二进制数据的缓冲区 Netty的ByteBuf是一个可用于高效存储和操作字节数据的数据结构。与传统的Byt…

跳跃游戏[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个非负整数数组nums&#xff0c;你最初位于数组的第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回true&#xff1b;否则&#xff0c;返…

阿里入局鸿蒙!鸿蒙原生应用再添两员新丁

今日HarmonyOS微博称&#xff0c;阿里钉钉、蚂蚁集团旗下的移动开发平台mPaaS与华为达成合作&#xff0c;宣布启动鸿蒙原生应用的开发&#xff01;相关应用将以原生方式适配#HarmonyOS NEXT#系统。 #HarmonyOS#市场或迎来爆发式增长&#xff01; 阿里钉钉 阿里钉钉与华为达成合…

Android 匿名内存深入分析

Android 匿名内存解析 有了binder机制为什么还需要匿名内存来实现IPC呢&#xff1f;我觉得很大的原因就是binder传输是有大小限制的&#xff0c;不说应用层的限制。在驱动中binder的传输大小被限制在了4M&#xff0c;分享一张图片可能就超过了这个限制。匿名内存的主要解决思路…