JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......

news2024/12/23 1:52:04

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

 

一、引言

在前端开发中,数组是一种常见且重要的数据结构。数组提供了许多便捷的方法来操作和处理其中的数据。本文将简单介绍前端中数组常用的API,包括添加、删除、截取、合并、转换等操作。

二、push() 方法和 pop() 方法

push()方法用于向数组末尾添加一个或多个元素,并返回修改后的数组的新长度

const fruits = ['苹果', '香蕉'];
const res = fruits.push('橘子', '西瓜');
console.log(fruits);  //[ '苹果', '香蕉', '橘子', '西瓜' ]
console.log(res);     //4

pop() 方法用于删除并返回数组的最后一个元素。

const fruits = ['苹果', '香蕉', '橘子'];
const lastFruit = fruits.pop();
console.log(fruits);     // ['苹果', '香蕉']
console.log(lastFruit); //橘子

三、shift() 方法和 unshift() 方法

shift() 方法用于删除并返回数组的第一个元素。

const fruits = ['苹果', '香蕉', '橘子'];
const firstFruit = fruits.shift();
console.log(fruits);      //[ '香蕉', '橘子' ]
console.log(firstFruit);  //苹果

unshift() 方法用于向数组的开头添加一个或多个元素,并返回修改后的数组的新长度。

const fruits = ['苹果', '香蕉'];
const newLength = fruits.unshift('橘子', '西瓜');
console.log(fruits);        //[ '橘子', '西瓜', '苹果', '香蕉' ]
console.log(newLength); //4

四、slice() 方法

slice() 方法用于从数组中截取指定位置的元素,返回一个新的数组。

语法是:array.slice(start, end),其中,startend都是可选参数,表示选取的元素的起始位置和结束位置。如果不传入参数则默认选取整个数组。该方法返回的是一个新的数组,包含从startend不包括end)的元素。

const names = ['张三', '李四', '王五', '赵六'];
const slicedNames = names.slice(1, 3);
const slicedNames1 = names.slice();
const slicedNames2 = names.slice(0);
const slicedNames3 = names.slice(2);
const slicedNames4 = names.slice(3);
const slicedNames5 = names.slice(4);

//slice不改变原数组
console.log(names);          //[ '张三', '李四', '王五', '赵六' ] 
console.log(slicedNames);  //[ '李四', '王五' ]
console.log(slicedNames1); //[ '张三', '李四', '王五', '赵六' ] 
console.log(slicedNames2); //[ '张三', '李四', '王五', '赵六' ] 
console.log(slicedNames3); //[ '王五', '赵六' ]
console.log(slicedNames4); //[ '赵六' ]
console.log(slicedNames5); //[] 参数大于等于4时就输出空数组

五、splice() 方法

splice() 方法用于从数组中删除、替换或添加元素,并返回被删除的元素组成的数组,它会直接修改原数组。

语法:array.splice(start, deleteCount, item1, item2, ...)

其中,start表示要修改的起始位置,deleteCount表示要删除的元素个数,item1、item2等表示要添加的元素。如果deleteCount为0,则表示只添加元素,不删除元素。

//实现删除
let arr = [1,2,3,4,5]
console.log(arr.splice(0,2));  //[ 1, 2 ] 返回被删除的元素
console.log(arr);  //[ 3, 4, 5 ]   该方法会改变原数组

//实现添加
let arr2 = [1,2,3,4,5]
console.log(arr2.splice(1,0,666,777)); //[] 返回空数组,没有删除元素
console.log(arr2);  //[ 1, 666, 777, 2, 3, 4, 5 ]  原数组改变了

// 实现替换
let arr3 = [1,2,3,4,5]
console.log(arr3.splice(2,1,"aaa","bbb")); //[ 3 ]  返回被删除的一个元素
console.log(arr3);  //[ 1, 2, 'aaa', 'bbb', 4, 5 ]  可以添加字符串

let arr4 = [1,2,3,4,5]
console.log(arr4.splice(1,4,666)); //[ 2, 3, 4, 5 ]  返回被删除的四个元素
console.log(arr4);  //[ 1, 666 ]

六、join() 方法

join() 方法用于将数组中的所有元素以指定的分隔符连接成一个字符串

const fruits = ['苹果', '香蕉', '橘子'];
const joinedString = fruits.join(',');
console.log(fruits);  //[ '苹果', '香蕉', '橘子' ]
console.log(joinedString); //苹果,香蕉,橘子

七、concat() 方法

concat() 方法用于合并两个或多个数组,返回一个新的数组。

const fruits1 = ['苹果', '橘子'];
const fruits2 = ['西瓜', '蓝莓'];
const combinedFruits = fruits1.concat(fruits2);
console.log(combinedFruits); //[ '苹果', '橘子', '西瓜', '蓝莓' ]

八、forEach() 方法

forEach() 方法用于对数组中的每个元素执行一个回调函数。

const fruits = ['火龙果', '蓝莓', '西瓜', '葡萄'];
fruits.forEach(fruit => {
  console.log(fruit); //火龙果 蓝莓 西瓜 葡萄
});

九、map() 方法

map() 方法用于对数组中的每个元素执行一个回调函数,并返回一个新的数组,新数组中的元素为回调函数的返回值。

const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(num => num * num);
console.log(squaredNumbers); //[ 1, 4, 9, 16, 25 ]

十、filter() 方法

filter() 方法用于筛选、过滤数组中符合条件的元素,并返回一个新的数组。

//筛选出偶数
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); //[ 2, 4 ]

十一、reduce() 方法

reduce() 方法是数组对象的一个方法,用于将数组中的所有元素按照指定的规则进行归并计算,返回一个最终值。

语法:array.reduce(callback, initialValue)

该方法接收两个参数,第一个参数是一个回调函数,第二个参数是一个初始值。回调函数中可以接收四个参数,分别是:

  1. accumulator:累加器,用于存储上一次回调函数的返回值或初始值。
  2. currentValue:当前元素的值。
  3. currentIndex:当前元素的索引。
  4. array:数组对象本身。

initialValue是初始值,可选参数。

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((acc, num) => {
  return acc + num
}, 10);
console.log(sum); //25
//如果初始值是设为0,则输出15

十二、fill() 方法

JS中的fill方法可以填充一个数组中的所有元素,它会直接修改原数组。

语法:array.fill(value, start, end)

其中,value表示要填充的值,start和end表示要填充的起始位置和结束位置。如果不传入start和end,则默认填充整个数组。该方法返回的是被修改后的原数组。

let arr = [1, 2, 3, 4, 5];
arr.fill(0);
console.log(arr); // [0, 0, 0, 0, 0]

//将数组中从位置2到位置4(不包括位置4)的元素都填充为6
arr.fill(6, 2, 4);
console.log(arr);  //[ 0, 0, 6, 6, 0 ]

十三、数组查找API

1.includes()方法

includes方法用于检查数组中是否包含某个元素,如果包含则返回 true,否则返回 false。

与 indexOf() 方法不同,includes() 方法不支持指定起始位置,它从数组的开头开始搜索。

const fruits = ['苹果', '香蕉', '橘子', '西瓜', 1, 2, 3];
console.log(fruits.includes('橘子')); //true
console.log(fruits.includes('葡萄')); //false
console.log(fruits.includes(3));      //true
console.log(fruits.includes(4));      //false

2.indexOf()方法

需要注意的是,indexOf方法只会返回第一个匹配项的位置。如果数组中存在多个相同的元素,该方法只会返回第一个元素的位置。

此外,indexOf方法还可以接受一个可选的第二个参数,用于指定从哪个位置开始查找。

const fruits = ['苹果', '蓝莓', '橘子', '西瓜', '葡萄'];
console.log(fruits.indexOf('橘子', 1));  //2  返回元素下标
console.log(fruits.indexOf('橘子', 3));  //-1  没有该元素
const arr = [1,2,3,4,5,6,7,6,6,5];
// 从下标6开始查找元素5
console.log(arr.indexOf(5,6)); //9

3.lastIndexOf()()方法

lastIndexOf() 方法用于查找数组中某个元素最后一次出现的索引(位置),如果找到则返回该索引值,否则返回 -1。

const fruits = ['火龙果', '橘子', '蓝莓', '西瓜', '葡萄', '橘子'];
console.log(fruits.lastIndexOf('橘子')); //5
console.log(fruits.lastIndexOf('柚子')); //-1

4.findIndex()方法

findIndex() 方法用于查找数组中满足条件的元素的索引,如果找到则返回该索引值,否则返回 -1。

const arr = [1, 2, 3, 4, 5, 6];
const index = arr.findIndex(num => num > 3);
console.log(index);   //3  返回第一个符合条件的元素的下标
const index2 = arr.findIndex(num => num > 10);
console.log(index2); //-1  不存在符合条件的元素

十四、sort() 方法

sort() 方法用于对数组进行原地排序,会直接修改原始数组,而不会创建新的数组。默认情况下,它将数组元素视为字符串,并按照 Unicode 码点进行排序。但是,可以传入自定义的比较函数来实现基于其他规则的排序。

比较函数:比较函数接收两个参数,通常被称为 a 和 b,表示进行比较的两个元素。它应该返回一个负数、零或正数,表示 a 应该在 b 之前、与 b 相同位置还是在 b 之后。比较函数的返回值规则如下:

  1. 如果返回值小于 0,则 a 排在 b 前面。
  2. 如果返回值等于 0,则 a 和 b 的相对位置不变。
  3. 如果返回值大于 0,则 a 排在 b 后面。
const arr = [3, 1, 5, 2, 4];
arr.sort();
console.log(arr);  //[1, 2, 3, 4, 5]

//默认排序(按照 Unicode 码点排序)
const arr = ['f', 'k', 'c', 'a', 'b'];
arr.sort();
console.log(arr);  //[ 'a', 'b', 'c', 'f', 'k' ]

//使用比较函数进行自定义排序
const arr = [10, 2, 66, 26, 13, 1];
arr.sort((a, b) => a - b);
console.log(arr);  //[ 1, 2, 10, 13, 26, 66 ]

const arr = [10, 2, 66, 26, 13, 1];
arr.sort((a, b) => b - a);
console.log(arr);  //[ 66, 26, 13, 10, 2, 1 ]

十五、reverse() 方法

reverse() 方法用于反转数组中的元素顺序,即将数组元素进行逆序排列。

const arr = [1, 2, 3, 4, 5];
arr.reverse();
console.log(arr); //[ 5, 4, 3, 2, 1 ]

十六、toString()和toLocaleString()方法

toString方法将数组转换为一个由数组元素组成的字符串,元素之间用逗号分隔。

const arr = [1, 2, 3, 4, 5];
console.log(arr.toString());  //1,2,3,4,5
const arr2 = ['苹果', '蓝莓', '橘子', '西瓜', '葡萄'];
const arr3 = ['a', 'null', 'b', 'c', 'undefined', 'd', 'e']
console.log(arr2.toString());  //苹果,蓝莓,橘子,西瓜,葡萄
console.log(arr3.toString());  //a,null,b,c,undefined,d,e

toLocaleString方法将数组转换为一个由数组元素组成的字符串,元素之间同样用逗号分隔,但是它会根据当前环境的语言和地区设置来决定元素的格式。

//根据当前环境的语言和地区设置来决定元素的格式
const arr = [123456.789, new Date()];
//我补充写作的时间
console.log(arr.toLocaleString()); //123,456.789,2023/5/29 07:57:19

const arr2 = [1000, 2000, 3000];
const str = arr2.toLocaleString();
console.log(str); //1,000,2,000,3,000

十七、Array.from() 方法

Array.from() 是 JavaScript 中一个用于从类数组或可迭代对象创建新数组的静态方法。它接收一个可迭代对象或类数组的对象,并返回一个新的数组实例。

Array.from(iterable, mapFn, thisArg)

  1. iterable: 必需,一个可迭代对象或类似数组的对象,用于创建新的数组。
  2. mapFn (可选): 一个映射函数,用于对每个元素进行处理后返回新数组中的元素。
  3. thisArg (可选): 可选参数,执行 mapFn 函数时的 this 值。
//使用字符串创建数组
const str = "Hello";
const arr = Array.from(str);
console.log(arr); //[ 'H', 'e', 'l', 'l', 'o' ]
//使用类似数组的对象创建数组
const obj = {
  0: "榴莲",
  1: "牛油果",
  2: "蓝莓",
  length: 3
};
const arr = Array.from(obj);
console.log(arr);  //[ '榴莲', '牛油果', '蓝莓' ]
//使用映射函数处理数组元素
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = Array.from(numbers, num => num * 2);
console.log(doubledNumbers); //[ 2, 4, 6, 8, 10 ]

十八、最后的话

本文介绍了前端中数组常用的 API,涵盖了添加、删除、截取、合并、转换等常见操作。熟练掌握这些方法可以提高一定的开发效率。在实际开发中,请根据具体需求选择适合的数组方法。

能力一般,水平有限,本文可能存在纰漏或错误,如有问题欢迎指正,感谢你阅读这篇文章,如果你觉得写得还行的话,不要忘记点赞、评论、收藏哦!祝生活愉快!

 

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

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

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

相关文章

【录用案例】1区SCI仅1个月14天录用,新增19篇录用、5篇见刊、6篇检索

2023年5月20日-2023年5月26日,经核实,由我处Unionpub学术推荐的19篇论文已被期刊部录用、5篇见刊、6篇检索: 2区肿瘤类SCI 【期刊简介】IF:4.5-5.0,JCR2区,中科院2区 【检索情况】SCI 在检,正刊 【征稿…

一文包你学会网络数据抓包

本篇将图文并茂教你如何使用抓包工具,并在文章最后教大家如何偷取FTP的用户名密码。 一、安装 本文为大家介绍一个非常好用的抓包工具,科来。 下载地址: http://www.colasoft.com.cn/ 下载科莱 下载完毕,双击直接下一步即可安…

msvcr71.dll丢失的解决方法,多种修复方法全方位分享

当我们在使用某些软件时,可能会出现提示“msvcr71.dll丢失”的错误信息。这个错误信息意味着我们的电脑缺少msvcr71.dll文件,这个文件是由Microsoft Visual C 2003运行库提供的。如果我们遇到这个问题,我们需要采取措施来解决它。本文将介绍m…

体验管理|如何快速低成本开始体验相关的数字化工作‼️

Guofu 第 95⭐️ 篇原创文章分享 (点击👆🏻上方卡片关注我,加⭐️星标⭐️~) 🚏 写在前面 在体验经济时代,传统企业在应对新需求、新挑战的时候,也需要用新的方式进行企业升级和转型…

DailyMart03:如何基于DDD设计商城的领域模型?

大家好,我是飘渺。既然有人催更那今天咱们就继续更新DDD&微服务系列! 在面向对象开发中,所有事物都可以看作是对象。然而,在日常开发中,我们通常从数据出发来设计对象的表现形式,这种做法侧重于数据属性…

二、高通相机bringup 流程

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、相机Sensor 点亮相关的文件二、Sensor 驱动文件详解 一、相机Sensor 点亮相关的文件 1.1 Sensor 驱动XML以及CPP文件 Sensor 文件路径:…

搭建Nextcloud私有云 - 零基础搭建私有云盘并内网穿透远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章:使用Nextcl…

Python网页开发(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.5.31 最早更新时间:2023.5.31 文章目录 1. 项目实例2. flask包2. Django包3. mod_wsgi包 flask和Django等包是用来写网站的,但这些包构建的网站直接运行是不稳定的,所以需要Apa…

软件设计师(中级)全过程总结

软考总结目录 宏观  学习感受  阶段划分 微观  1.自己看书和看视频:  2.学习的知识点和课后题进行结合  3.做往年的软考真题  4.提炼出相对来说难以攻克的问题组织分享和讨论  5.小组讨论做错的题并进行结构化 总结学习时间上学习方法上学习形式上 宏…

86.建立主体页面-第二部分

上一节我们的基础的页面已经生成了,页面如下: ● 接着我们来编写标题的样式,标题的调整可以根据自己的需求来调整,我这里就直接写 .heading-primary {font-size: 5.2rem;font-weight: 700;line-height: 1.05;color: #333;lette…

一般测试用例执行过程的四个步骤

一般测试用例执行过程的四个步骤 测试用例的执行过程是软件测试中非常重要的一环,它可以有效验证软件是否符合预期的功能和性能要求,进而保证软件的质量和稳定性。一般来说,测试用例的执行过程可以分为四个步骤: 第一步&#xff1…

【C++】struct 和 class 的区别

欢迎来到博主 Apeiron 的博客,祝您旅程愉快。时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 在 C 中,struct 和 class 唯一的区别就在于 默认的访问权限不同。区别如下: …

STM32调试功能

文章目录 STM32调试功能1.硬件接口图2.调试原理3.引脚分配4.调试接口使用方式5.芯片配置 STM32调试功能 1.硬件接口图 2.调试原理 Cortex-M内核(M0/M3/M4/M7等)包含用于高级调试功能的硬件。利用这些调试功能,可以在取指(指令断…

设计模式之~命令模式

定义: 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 为什么需要命令模式? 在我们的软件开发系统中…

100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 用…

Web的基本漏洞--SSRF漏洞

目录 一、SSRF漏洞介绍 1.SSRF漏洞原理 2.SSRF漏洞经常存在的位置 3.攻击方式 4.SSRF漏洞危害 5.SSRF漏洞的防范 一、SSRF漏洞介绍 1.SSRF漏洞原理 SSRF(服务器端请求伪造)漏洞,出现的原因:是因为服务器与服务器之间有一个服务器内网&…

CVPR2023高质量论文 | Consistent-Teacher:半监督目标检测超强SOTA

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/abs/2209.01589 计算机视觉研究院专栏 作者:Edison_G 《Consistent-Teacher: Towards Reducing …

【C语言】sizeof和strlen的区别【详解】

目录 一.sizeof和strlen的主要区别 二.sizeof和strlen分别讲解(含例题和详解) 1.sizeof 在计算字符型数组时(例题讲解) 计算整型数组(例题讲解) 2.strlen 例子一(讲解)&#…

运维监控Grafana部署

运维监控Grafana部署 简介 安装 部署形式 Grafana支持两种部署形式 自行部署, 可以部署在操作系统之上. 自行提供服务器, 域名等.Grafana官方托管. 无需安装, 在线注册即可得到一个专属于自己的Grafana, 但是要花钱的. 是一种SaaS服务 我们课程选择方式1 安装 Grafana支…

0531最后的挣扎结束于传说中的段错误

部署训练后的缺陷检测模型 Linux Ubuntu18.04双机尝试 报错,Linux内核或是编译器版本不匹配,多次尝试更改18.04的gcc,g,gcc-arm-linux,garm-linux的代码,尝试在Makefile文件里更改编译器路径、添加LInux内…