JS数组方法合集(含应用场景)

1.Array.push()

向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变

const arr = ["apple", "orange", "grape"];
const arr_length = arr.push("banana");console.log("arr", arr, "arr_length", arr_length);
// arr: [ 'apple', 'orange', 'grape', 'banana' ] arr_length: 4

2.Array.pop()

删除并返回数组的最后一个元素,若该数组为空,则返回undefined。原数组改变。

const arr = ["apple", "orange", "grape"];
const del_data = arr.pop();console.log("arr:", arr, "del_data:", del_data);
// arr: [ 'apple', 'orange' ] del_data: grape

3.Array.unshift()

向数组的开头添加一个或多个元素,并返回新的数组长度。原数组改变

const arr = ["apple", "orange", "grape"];
const arr_length = arr.unshift("banana");console.log("arr:", arr, "arr_length:", arr_length);
// arr: [ 'banana', 'apple', 'orange', 'grape' ] arr_length: 4

4.Array.shift()

删除并返回数组的第一个元素,若该数组为空,则返回undefined。原数组改变。

const arr = ["apple", "orange", "grape"];
const del_data = arr.shift();console.log("arr:", arr, "del_data:", del_data);
// arr: [ 'orange', 'grape' ] del_data: apple

5.Array.concat(arr1,arr2,...)

合并多个数组,生成一个新数组,原数组不变

const arr1 = ["apple", "orange", "grape"];
const arr2 = ["banana", "watermelon"];
const arr3 = ["mango"];
const newArr = arr1.concat(arr2, arr3);console.log("newArr:", newArr);
// newArr: [ 'apple', 'orange', 'grape', 'banana', 'watermelon', 'mango' ]

6.Array.join()

将数组的每一项使用指定的字符连接成一个字符串。默认连接字符为","。不改变原数组

const arr = ["apple", "orange", "grape"];
const str1 = arr.join();
const str2 = arr.join("--");console.log("str1:", str1);
// str1: apple,orange,grapeconsole.log("str2:", str2);
// str2: apple--orange--grape

7.Array.reverse()

将数组倒序,改变原数组

const arr = ["one", "two", "three"];arr.reverse();console.log("arr:", arr);
// arr: [ 'three', 'two', 'one' ]

8.Array.sort(fun)

对数组排序。参数 fun 可选,必须是函数,规定排序顺序。原数组改变。

注:如果调用该方法时没有使用参数,将不会按照数值大小排序,按照字符编码的顺序进行排序。

如果想按照其他规则进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

简单点就是:比较函数两个参数 a 和 b,返回 a-b 升序,返回 b-a 降序

从小到大

const arr = [85, 22, 33, 66, 1, 9, 222];const sortMinToMax = function (a, b) {return a - b;};console.log("arr:", arr.sort(sortMinToMax));
// arr: [ 1,  9,  22, 33, 66, 85, 222 ]

从大到小

const arr = [85, 22, 33, 66, 1, 9, 222];console.log("arr:",arr.sort((a, b) => b - a));
// arr: [ 222, 85, 66, 33, 22,  9,  1 ]

按照数组对象中的某个值排序

const arrObj = [{name: "第一名",age: 23,},{name: "第二名",age: 18,},{name: "第三名",age: 28,},{name: "第四名",age: 15,},];const sortMinToMax = (key) => {return (a, b) => {return a[key] - b[key];};};console.log("arrObj:", arrObj.sort(sortMinToMax("age")));
/* arrObj: [{ name: '第四名', age: 15 },{ name: '第二名', age: 18 },{ name: '第一名', age: 23 },{ name: '第三名', age: 28 }] */

9.Array.map(function(currentValue,index,arr), thisValue)

  通过指定函数处理数组的每个元素,并返回处理后的新数组。不改变原数组

基础应用:

const arr = [2, 4, 6, 8];
const newArr = arr.map((item) => item * 2);console.log("newArr:", newArr);
// newArr: [ 4, 8, 12, 16 ]

多数组合并成一个新的数组对象:

const arr1 = ["吕大", "赵二", "关三", "典小四"];
const arr2 = ["公爵", "侯爵", "伯爵", "子爵"];const newArr = arr1.map((item, index) => {return {level: arr2[index],name: item,};});console.log("newArr:", newArr);
/* newArr: [{ level: '公爵', name: '吕大' },{ level: '侯爵', name: '赵二' },{ level: '伯爵', name: '关三' },{ level: '子爵', name: '典小四' }] */

拼接数组里的多个键值

const arr = [{ level: "公爵", name: "吕大" },{ level: "侯爵", name: "赵二" },{ level: "伯爵", name: "关三" },{ level: "子爵", name: "典小四" },];const newArr = arr.map((item) => `${item["level"]}${item["name"]}`);console.log("newArr:", newArr);// newArr: [ '公爵吕大', '侯爵赵二', '伯爵关三', '子爵典小四' ]

map中的第二个参数thisValue的应用

const arr = [2, 4, 6, 8];/* 该this参数将在回调函数中使用。默认情况下,其值为undefined。这里this值更改为数字10,如果不写this指向的是全局 */const newArr = arr.map(function (item) {return item * this;}, 10);console.log("newArr:", newArr);
// newArr: [ 20, 40, 60, 80 ]

10.Array.slice(start,end)

按照条件查找出其中的部分内容,返回一个新的数组,包含从 start(包括该元素) 到 end (不包括该元素)的 Array 中的元素。不改变原数组。

array.slice(n) 第二个参数省略,则一直查找到末尾

array.slice(0)原样输出内容,可以实现数组克隆

array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项

const arr = [2, 4, 6, 8];
const newArr = arr.slice(1, 3);console.log("newArr:", newArr);
// newArr: [ 4, 6 ]

11.Array.splice(index,howmany,item1,item2…)

从数组中添加或删除元素。改变原数组。

从index位置开始删除howmany个元素,并将item1、item2…数据从index位置依次插入。howmany为0时,则不删除元素。

const arr = ["吕大", "赵二", "关三", "典小四"];arr.splice(2, 1, "杰尼龟", "皮卡丘");console.log("arr:", arr);
// arr: [ '吕大', '赵二', '杰尼龟', '皮卡丘', '典小四' ]

12.Array.forEach(function(item, index, arr))

用于调用数组的每个元素,并将元素传递给回调函数。原数组不变。(注意该方法和map的区别,若直接打印Array.forEach,结果为undefined)

item

必需。当前元素

index

可选。当前元素的索引值。

arr

可选。当前元素所属的数组对象。

forEach只遍历,不生成新数组;map返回新数组

const arr = ["吕大", "赵二", "关三", "典小四"];arr.forEach((item, index) => console.log(`第${index + 1}个人是${item}`));
/* 第1个人是吕大第2个人是赵二第3个人是关三第4个人是典小四 */

13.Array.filter(function(currentValue,index,arr), thisValue)

检测数值元素,并返回符合条件所有元素的新数组。原数组不变。

const arr = [2, 4, 6, 8];const newArr = arr.filter((item) => item > 4);console.log("newArr:", newArr);
// newArr: [ 6, 8 ]

14.Array.every(function(currentValue,index,arr), thisValue)

对数组中的每一项进行判断,若都符合则返回true,否则返回false。不改变原数组。类似于并逻辑

const arr1 = [{ level: "公爵", name: "吕大", isShow: false },{ level: "侯爵", name: "赵二", isShow: false },{ level: "伯爵", name: "关三", isShow: true },{ level: "子爵", name: "典小四", isShow: true },];console.log("arr1:",arr1.every((item) => item.isShow));
// arr1: falseconst arr2 = [{ level: "公爵", name: "吕大", isShow: true },{ level: "侯爵", name: "赵二", isShow: true },];console.log("arr2:",arr2.every((item) => item.isShow));
// arr2: true

15.Array.some(function(currentValue,index,arr), thisValue)

对数组中的每一项进行判断,若都不符合则返回false,否则返回true。不改变原数组。类似于或逻辑

const arr1 = [{ level: "公爵", name: "吕大", isShow: false },{ level: "侯爵", name: "赵二", isShow: false },{ level: "伯爵", name: "关三", isShow: true },{ level: "子爵", name: "典小四", isShow: true },];console.log("arr1:",arr1.some((item) => item.isShow));
// arr1: trueconst arr2 = [{ level: "公爵", name: "吕大", isShow: false },{ level: "侯爵", name: "赵二", isShow: false },];console.log("arr2:",arr2.some((item) => item.isShow));
// arr2: false

16.Array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。不改变原数组

 数组累加、累乘

let arr = [1,2,3,4,5]console.log(arr.reduce("result:",(x,y)=>x+y));
//result: 15console.log(arr.reduce("result:",(x,y)=>x*y));
//result: 120

获取最值(最大值)

let arr = [189, 2, 333, 4, 6, 999, 8, 55, 456, 528];let maxValue = arr.reduce((pre, cur) => {return pre > cur ? pre : cur;});console.log("maxValue", maxValue);
// maxValue 999

获取数组元素出现次数

let arr = [1, 2, 5, 8, 9, 5, 2, 3, 4, 6, 1, 8, 22, 5, 9, 4, 3, 5];let numObj = arr.reduce((pre, cur) => {pre[cur] = pre[cur] ? pre[cur] + 1 : 1;return pre;}, {});console.log("numObj", numObj);
/* numObj {'1': 2,'2': 2,'3': 2,'4': 2,'5': 4,'6': 1,'8': 2,'9': 2,'22': 1} */

二维数组转化为一维数组

let arr = [[2, 3, 4],[6, 7, 8],[10, 11, 12],];let newArr = arr.reduce((pre, cur) => {return pre.concat(cur);}, []);console.log("newArr", newArr);/* newArr [2,  3,  4,  6, 7,8, 10, 11, 12] */

多维数组转化为一维数组

let arr = [[0, 1],[1, 2, 3],[4, [1, 23]],];const newArr = function (arr) {return arr.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur),[]);};console.log(newArr(arr));
/* [0, 1, 1,  2,3, 4, 1, 23] */

数组去重

let arr = [2, 4, 6, 8, 4, 5, 8, 2, 8, 2, 6, 1, 5, 2, 5];let newArr = arr.reduce((pre, cur) => {if (!pre.includes(cur)) {pre.push(cur);}return pre;}, []);console.log("newArr", newArr);
// newArr [ 2, 4, 6, 8, 5, 1 ]

数组对象根据某个键值去重

let arr = [{ name: "xiaoming", age: 11 },{ name: "xxx", age: 12 },{ name: "xiaoming", age: 11 },];let obj = {};
let newArr = arr.reduce((pre, cur) => {if (!obj[cur.name]) {obj[cur.name] = true;pre.push(cur);}return pre;}, []);console.log("newArr", newArr);
// newArr [ { name: 'xiaoming', age: 11 }, { name: 'xxx', age: 12 } ]

17.Array.indexOf(item,start)

检测当前值在数组中第一次出现的位置索引。如果没有搜索到则返回 -1。不改变原数组

const arr1 = ["apple", "orange", "grape"];console.log("arr1:", arr1.indexOf("orange"));
// arr1: 1const arr2 = ["apple", "orange", "grape", "orange", "banana"];
console.log("arr2:", arr2.indexOf("orange", 2));
// arr2: 3

18.Array.includes(searchElement, fromIndex)

判断一个数组是否包含一个指定的值。如果是返回 true,否则false。不改变原数组

const arr = ["apple", "orange", "grape"];console.log("result1:", arr.includes("orange"));
// result1: trueconsole.log("result2:", arr.includes("orange", 2));
// result2: false

19.Array.find(function(currentValue, index, arr),thisValue)

返回通过测试(函数内判断)的数组的第一个元素的值。如果没有符合条件的则返回 undefined。不改变原数组

const arr = [2, 4, 6, 8];console.log("result:",arr.find((item) => item > 4));
// result: 6

20.Array.findIndex(function(currentValue, index, arr),thisValue)

返回传入一个测试条件(函数)符合条件的数组第一个元素位置。如果没有符合条件的元素返回 -1。不改变原数组

const arr = [2, 4, 6, 8];console.log("result:",arr.findIndex((item) => item > 4));
// result: 2

21.Array.isArray(obj)

判断一个对象是否为数组。obj为要判断的对象,必需。如果对象是数组返回 true,否则返回 false。不改变原数组

console.log(Array.isArray([2, 4, 6, 8]));
// trueconsole.log(Array.isArray({ name: "xiaoming" }));
// false

22.Array.join(separator)

用于把数组中的所有元素转换一个字符串。不改变原数组

separator,可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

const fruits = ["Banana", "Orange", "Apple", "Mango"];
const energy = fruits.join(" and ");console.log("energy:", energy);
// energy: Banana and Orange and Apple and Mango

23.Array.of()

将一组值转换为数组,不考虑参数的数量或类型。

console.log(Array.of(1, "a", [3, 6], { name: "xiaoming" }));
// [ 1, 'a', [ 3, 6 ], { name: 'xiaoming' } ]

24.Array.at()

用于接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数。不改变原数组。(慎用,语法比较新,注意浏览器版本和node版本,有兼容性问题)

const arr = ["吕大", "赵二", "关三", "典小四"];console.log(arr.at(-1));
// 典小四

25.Array.flat(depth)

按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。简单来说,就是多维数组扁平化的程度

depth, 指定要提取嵌套数组的结构深度,默认值为 1

flat() 方法会移除数组中的空项

const arr1 = [1, 2, [3, 4]];
console.log(arr1.flat());
// [1, 2, 3, 4]const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat());
// [1, 2, 3, 4, [5, 6]]const arr3 = [1, 2, [3, 4, [5, 6]]];
console.log(arr3.flat(2));
// [1, 2, 3, 4, 5, 6]//使用 Infinity,可展开任意深度的嵌套数组
const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
console.log(arr4.flat(Infinity));
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

其他:

还有一些数组方法,比较深冷,应用场景很低,在此不再演示。如:copyWithin(),entries(),from() ,keys() ,lastIndexOf() ,reduceRight(),toString(),valueOf(),flatMap()。感兴趣的话可以学习了解一下。

注意:

原数组改变的方法有:push pop shift unshift reverse sort splice
不改变原数组的方法有:concat map filter join every some indexOf slice forEach...

小技巧Tip:涉及到数组增,删,改的方法都是改变原数组的;涉及到数组查询类的方法是不改变原数组的

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

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

相关文章

SpringCloud: sentinel链路限流

一、配置文件要增加 spring.cloud.sentinel.webContextUnify: false二、在要限流的业务方法上使用SentinelResource注解 package cn.edu.tju.service;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockExcept…

图像处理软件Photoshop 2023 mac新增功能 ps 2023中文版

​Photoshop 2023 mac是一款功能强大、易用且灵活的图像编辑软件,旨在满足专业设计师和摄影师的需求。无论您是处理照片、制作图形还是进行艺术创作,Photoshop 2023 都能为您提供丰富的工具和效果,帮助您实现创意想法。Photoshop还支持多种文…

nodejs+vue中学信息技术线上学习系统-计算机毕业设计

因此,将现代化的计算机技术、网络技术以及多媒体等技术相结合,开发基于互联网的自主学习平台,为学生提供良好的自主学习环境,方便学生能够网上学习,师生通过该平台可以进行课后交流。目 录 摘 要 I ABSTRACT II 目 录 …

Linux系统之passwd命令的基本使用

Linux系统之passwd命令的基本使用 一、passwd命令介绍1.1 passwd命令简介1.2 passwd命令起源 二、passwd命令的使用帮助2.1 passwd命令的help帮助信息2.2 passwd命令的语法解释 三、查看passwd相关文件3.1 查看用户相关文件3.2 查看组相关文件 四、passwd命令的基本使用4.1 设置…

零信任身份管理平台,构建下一代网络安全体系

随着数字化时代的到来,网络安全已成为企业和组织面临的一项重要挑战。传统的网络安全方法已经无法满足不断演变的威胁和技术环境。近期,中国信息通信研究院(简称“中国信通院”)发布了《零信任发展研究报告( 2023 年&a…

力扣每日一题48:旋转图像

题目描述: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],…

【前端】使用tesseract插件识别提取图片中的文字

前言 有时候项目需要识别证照信息,或者拍照搜索内容等。图片处理一般是后端处理比较好,不过前端也有相关插件处理,tesseract.js就是一种前端处理方案。 使用tesseract tesseract更多的语言模型:language配置 安装 Tesseract.…

Linux系统编程_进程间通信第2天: 共享内存(全双工)、信号(类似半双工)、信号量

1. 共享内存概述(433.10)(全双工) 2. 共享内存编程实现(434.11) 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区 特点 共享内存是最快的一种 IPC&…

Bootstrap的导航栏设计相关知识

Bootstrap的导航栏设计相关知识 目录 01-基础知识02-最基本的导航栏设计例子03-带下拉菜单的导航04-在导航栏中添加表单元素05-固定导航栏的位置(如固定到顶部和底部)06-设计导航栏的颜色和文本颜色 01-基础知识 导航栏是网页设计中不可缺少的部分,它是整个网站的…

Qt作业九

1、思维导图 2、作业 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTime> #include <QTimerEvent> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

Linux网络-UDP/TCP协议详解

Linux网络-UDP/TCP协议详解 2023/10/17 14:32:49 Linux网络-UDP/TCP协议详解 零、前言一、UDP协议二、TCP协议 1、应答机制2、序号机制3、超时重传机制4、连接管理机制 三次握手四次挥手5、理解CLOSE_WAIT状态6、理解TIME_WAIT状态7、流量控制8、滑动窗口 丢包问题9、拥塞控制…

Linux - 还不懂 gdb 调试器?(调试软件)

前言 当前&#xff0c;我们可以使用 make/makefile 来程序化执行代码文件&#xff1b;可以使用 gcc/g 等编译器来编译代码&#xff1b;可以使用 vim 编辑器来编写代码&#xff1b;其实在 Linux 当中还有一个工具&#xff0c;可以实现调试工作&#xff0c;这个工具就是 -- gdb。…

CSS 效果 圆形里一个文字居中

效果实现源码&#xff1a; 宽度&#xff0c;高度必须确认&#xff0c;且相等 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.circlew {width: 45px;height: 45p…

PHPEXCEL解决行数超过65536不显示问题

起因自然是导出数据到excel文件时&#xff0c;数据缺少现象。 百度讲解是将xls文件另存为xlsx文件。 除了这里的原因&#xff0c;还有一点是phpExcel存在两个写入类PHPExcel_Writer_Excel2007和PHPExcel_Writer_Excel5&#xff0c;而只有PHPExcel_Writer_Excel2007支持超过65…

可信执行环境简介:ARM 的 TrustZone

目录 可信执行环境安全世界与普通世界 - 上下文切换机制ARMv7 中的异常处理ARMv8 中的异常处理 信任区商业实施TrustZone 本身的漏洞高通Trustonic 信任区强化的弱点结论声明 可信执行环境 具有信任区的 ARM 处理器实现了架构安全性每个物理处理器内核提供两个虚拟的扩展 核心…

计数排序详解

一、什么是计数排序&#xff1f; 计数排序(CountSort)是一个非基于比较的排序算法&#xff0c;该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时&#xff0c;它的复杂度为Ο(nk)&#xff08;其中k是整数的范围&#xff09;&#xff0c;快于任何…

HCIP静态路由综合实验

题目&#xff1a; 步骤&#xff1a; 第一步&#xff1a;搭建上图所示拓扑; 第二步&#xff1a;为路由器接口配置IP地址&#xff1b; R1&#xff1a; [R1]display current-configuration intinterface GigabitEthernet0/0/0ip address 192.168.1.1 255.255.255.252 interfa…

数据分析:密度图

目前拥有的数据如图&#xff0c;三列分别对应瑕疵种类&#xff0c;对应的置信 度&#xff0c;x方向坐标。 现在想要做的事是观看瑕疵种类和置信度之间的关系。 要显示数据分布的集中程度&#xff0c;可以使用以下几种常见的图形来观察&#xff1a; 1、箱线图&#xff08;Box P…

c++数组教程

今天来讲讲数组 什么是数组&#xff1a; 我们来看一道题目&#xff1a; 【题目部分】 输入n个数,逆序输出它们. 输入 第一行一个整数n (0 < n < 60 ) 第二行n个整数 输出 一行,n个整数。 输入样例 1 5 1 6 2 8 4 输出样例 1 4 8 2 6 1 这下就难住很多人了&…

【数据可视化】—大屏数据可视化展示

【数据可视化】—大屏数据可视化展示 一、数据可视化 数据可视化的目的&#xff1a;借助于图形化工具&#xff0c;清晰有效的传达与沟通信息。 数据可视化可以把数据从冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。 二、 免费数据可视化库 Echarts 百度…