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.hqwc.cn/news/211954.html

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

相关文章

231123 刷题日报-动态规划

今天主要看了DP,前几天频繁遇到DP打击有点大。。 1. 0-1背包问题 要点: a. 三部曲: 1. 状态和选择 状态:物品序号、背包容量 选择:放、不放 2. dp数组定义、base case dp[i][w] 对于前i个物品,当前背包…

安卓现代化开发系列——从生命周期到Lifecycle

由于安卓已经诞生快二十载,其最初的开发思想与现代的开发思想已经大相径庭,特别是Jetpack库诞生之后,项目中存在着新老思想混杂的情况,让许多的新手老手都措手不及,项目大步向屎山迈进。为了解决这个问题,开…

【Axure教程】用中继器制作卡片多条件搜索效果

卡片设计通过提供清晰的信息结构、可视化吸引力、易扩展性和强大的交互性,为用户界面设计带来了许多优势,使得用户能够更轻松地浏览、理解和互动。 那今天就教大家如何用中继器制作卡片的模板,以及完成多条件搜索的效果,我们会以…

YOLOv8训练自己的目标检测数据集

YOLOv8训练自己的目标检测数据集 目录标题 源码下载环境配置安装包训练自己的数据集数据集文件格式数据集文件配置超参数文件配置训练数据集命令行训练脚本.py文件训练 进行detect显示detect的效果 源码下载 YOLOv8官方的GitHub代码,同时上面也有基础环境的配置要…

Android——资源IDnonFinalResIds和“Attribute value must be constant”错误

一、异常描述 通过资源ID引用资源提示错误 Attribute value must be constant 二、解决方案 在根目录下的文件 gradle.properties 中添加如下配置,然后Sync Project android.nonFinalResIdsfalse 三、问题原因 android.nonFinalResIds 是Android开发中一个用于解…

3D火山图绘制教程

一边学习,一边总结,一边分享! 本期教程内容 **注:**本教程详细内容 Volcano3D绘制3D火山图 一、前言 火山图是做差异分析中最常用到的图形,在前面的推文中,我们也推出了好几期火山图的绘制教程&#xff0…

单链表实现【队列】

目录 队列的概念及其结构 队列的实现 数组队列 链式队列 队列的常见接口的实现 主函数Test.c 头文件&函数声明Queue.h 头文件 函数声明 函数实现Queue.c 初始化QueueInit 创建节点Createnode 空间释放QueueDestroy 入队列QueuePush 出队列QueuePop 队头元…

C++每日选择题—Day1

第一题 以下C代码会输出什么? #include <iostream> using namespace std; class A { public:A() {}~A() {} private:static int a; }; int main() {cout << sizeof(A) << endl;return 0; } A&#xff1a;0 B&#xff1a;1 C&#xff1a;4 D&#xff1a;8 答…

【陈老板赠书活动 - 18期】-如何成为架构师这几本书推荐给你

陈老老老板&#x1f9b8; &#x1f468;‍&#x1f4bb;本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f468;‍&am…

微信小程序前端环境搭建

搭建微信小程序前端环境 申请小程序测试账号 访问路径 使用微信扫描二维码进行申请&#xff0c;申请成功之后&#xff0c;进入界面&#xff0c;获取小程序ID(AppID)和秘钥(AppSecret) 安装微信web开发者工具 访问路径 选择稳定开发的版本 需要在小程序的设置中将默认关闭…

微软发布最新.NET 8长期支持版本,云计算、AI应用支持再强化

11 月 15 日开始的为期三天的 .NET Conf 在线活动的开幕日上&#xff0c;.NET 8作为微软的开源跨平台开发平台正式发布。.NET 团队着重强调云、性能、全栈 Blazor、AI 和 .NET MAUI 是.NET 8的主要亮点。.NET团队在 .NET Conf 2023 [1]活动开幕式上表示&#xff1a;“通过这个版…

c++版本opencv计算灰度图像的轮廓点

代码 #include<iostream> #include<opencv.hpp>int main() {std::string imgPath("D:\\prostate_run\\result_US_20230804_141531\\mask\\us\\104.bmp");cv::Mat imgGray cv::imread(imgPath, 0);cv::Mat kernel cv::getStructuringElement(cv::MORPH…