前端数组方法汇总集锦

前言
数组主要使用场景有:
存储和处理数据:数组是一种有序的数据结构,可以用来存储和处理多个相关的数据。在前端开发中,我们经常使用数组来存储和处理列表、表格、选项等数据。
循环和遍历:数组提供了循环和遍历的功能,可以方便地对数组中的每个元素进行操作。在前端开发中,我们经常使用循环和遍历来处理列表、表格、选项等数据。
数据过滤和转换:数组提供了一些方法可以对数组进行过滤和转换。例如,我们可以使用filter()方法来过滤数组中的元素,使用map()方法来对数组中的每个元素进行转换。
数据排序和查找:数组提供了一些方法可以对数组进行排序和查找。例如,我们可以使用sort()方法来对数组进行排序,使用indexOf()方法来查找数组中的元素。

一、常见的数组方法

1.1 push

将指定的元素添加到数组的末尾,并返回新的数组长度

const arr = ['春', '夏', '秋']console.log('arr', arr.push('冬'), arr)

 1.2 pop

从数组中删除最后一个元素,并返回该元素的值

const arr = ['春', '夏', '秋']console.log('arr新的长度', arr.push('冬'), 'arr', arr)console.log('pop返回', arr.pop(), 'arr', arr)

1.3 shift

从数组中删除第一个元素,并返回该元素的值

const arr = ['春', '夏', '秋']console.log('arr新的长度', arr.push('冬'), 'arr', arr)console.log('pop返回', arr.pop(), 'arr', arr)console.log('shift方法', arr.shift(), 'arr', arr)

 1.4 unshift

向数组首位添加一个或多个元素,并返回新的数组长度

const arr = ['春', '夏', '秋']console.log('arr新的长度', arr.push('冬'), 'arr', arr)console.log('pop返回', arr.pop(), 'arr', arr)console.log('shift方法', arr.shift(), 'arr', arr)console.log('unshift', arr.unshift('春'), 'arr', arr)console.log('unshift', arr.unshift('四季', '天气'), 'arr', arr)

 1.5 concat

合并多个数组或值,返回一个新的数组

console.log('concat会返回新的值不改变原数据', arr.concat('数据拼接'), 'arr', arr)

 1.6 slice

截取数组的一部分,返回一个新的数组

const arr1 = ['0', '1', '2', '3', '4']const arr2 = ['0', '1', '2', '3', '4']console.log('slice的使用', arr1.slice(2), '截一个而且只截下标为4', arr2.slice((1, 4)))

1.7 splice

删除、替换或添加数组的元素,并返回被删除的元素

const name = ['前', '端', '百', '草', '阁']name.splice(2, 0, '你好') // 从第三个元素开始删,删0个,并且在第三个元素前加上 '你好'console.log('name', name)

1.8 fliter

过滤数组中的元素,返回一个新的数组)

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']const result = words.filter(word => word.length > 6) // 循环筛选出 长度大于6的 并返回一个新的数组console.log(result) //  ["exuberant", "destruction", "present"]

1.9 map

对数组中的每个元素进行操作,返回一个新的数组

const array1 = [1, 4, 9, 16]const map1 = array1.map(item => item * 2) // 循环进行一个每一项都乘以2的操作 并返回一个 新数组console.log(map1) // [2, 8, 18, 32]

 1.10 sort

对数组进行排序

const arr3 = [1000,10,1,4,3,2,77]const arr4 = [1000,10,1,4,3,2,77]arr3.sort((x,y) => x - y) // 正序console.log(arr3) //  [1, 2, 3, 4, 10, 77, 1000]arr4.sort((x,y) => y - x) // 倒序console.log(arr4) // [1000, 77, 10, 4, 3, 2, 1]

 1.11 reverse

翻转数组中的元素

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

 1.12 indexOf

查找数组中指定元素的索引

const arr6 = [1, 2, 3, 4, 5, 3]const num = arr6.indexOf(3) // 查找 3 出现的索引 只能查找到首次出现的索引console.log(num) // 2const num1 = arr6.indexOf(6) // 查找 6 出现的索引 找不到为-1console.log(num1) // -1

 1.13 find

查找数组中符合条件的第一个元素

const array2 = [5, 12, 8, 130, 44]const found = array2.find(item => item > 10) // 找到第一个大于10的元素console.log(found) // 12

 1.14 findIndex

查找数组中符合条件的第一个元素的索引

const array3 = [5, 12, 8, 130, 44]console.log('findIndex', array3.findIndex(i => i > 10))

 1.15 includes

判断一个数组是否包含一个指定的值

const array4 = [1, 2, 3, 4, 5]console.log('includes', array4.includes(4))

 1.16 every

判断数组内的所有元素是否都能通过指定函数的测试

const array5 = [1, 30, 39, 29, 10, 13];const res = array5.every(item => item > 0) // 判断数组中每一个元素是否都大于0console.log(res); // trueconst res2 = array5.every(item => item > 30) // 判断数组中每一个元素是否都大于30console.log(res2); 

 1.17 some

判断数组中是否至少有一个元素通过了指定函数的测试

const array5 = [1, 30, 39, 29, 10, 13];const res = array5.some(item => item > 0) // 判断数组中每一个元素是否都大于0console.log(res); // trueconst res2 = array5.some(item => item > 100) // 判断数组中每一个元素是否都大于30console.log(res2); // false

1.18 join

将一个数组的所有元素连接成一个字符串并返回这个字符串

const elements = ['Fire', 'Air', 'Water'];const res6 = elements.join() // 将数组中每一个元素用逗号连接console.log(res6); // Fire,Air,Waterconst res4 = elements.join('-') // 将数组中每一个元素用-连接console.log(res4); // Fire-Air-Waterconst res5 = elements.join('') // 将数组中每一个元素用''连接console.log(res5); // FireAirWater

 1.19 reduce

计算数组所有元素的总和

const array10 = [1, 2, 3, 4];const initialValue = 0;// 0+1+2+3+4const sumWithInitial = array10.reduce((accumulator, currentValue) => accumulator + currentValue,initialValue);// initialValue 是初始值console.log(sumWithInitial); // 10

 1.20 forEach

数组循环遍历

const array11 = ['春', '夏', '秋', '冬'];array11.forEach(element => console.log(element));

1.21 fill 

此方法通过用静态值填充数组来更改原始数组。你可以将所有元素更改为静态或少数选定元素。

const arr = ['1', '2', '3', '4']console.log('fill的使用', arr.fill('0', 1, 3)) // ['1', '0', '0', '4']const arr1 = ['1', '2', '3', '4']console.log('fill的使用', arr1.fill('0')) // ['0', '0', '0', '0']

二、 将平铺的数组结构转换为tree型数组结构

这里先给出平铺的数组结构,其中pid是他的父亲,id是他自己

[{"id": "604e21feb205b95968e13129","pid": "","name": "总裁办","code": "1001","manager": "管理员","introduce": "公司战略部","createTime": "2021-03-14 22:47:25"},{"id": "604e222bb205b95968e1312a","pid": "","name": "行政部","code": "XZB","manager": "管理员","introduce": "行政部","createTime": "2021-03-14 22:47:25"},{"id": "604e223fb205b95968e1312b","pid": "","name": "人事部","code": "RSB","manager": "管理员","introduce": "人事部","createTime": "2021-03-14 22:47:25"},{"id": "604e2251b205b95968e1312c","pid": "","name": "财务部","code": "CWB","manager": "管理员","introduce": "财务部","createTime": "2021-03-14 22:47:25"},{"id": "604e2262b205b95968e1312d","pid": "604e2251b205b95968e1312c","name": "财务核算部","code": "CWHSB","manager": "管理员","introduce": "财务核算部","createTime": "2021-03-14 22:47:25"},{"id": "604e227db205b95968e1312e","pid": "604e2251b205b95968e1312c","name": "税务管理部","code": "SWGLN","manager": "管理员","introduce": "税务管理部","createTime": "2021-03-14 22:47:25"},{"id": "604e2297b205b95968e1312f","pid": "604e2251b205b95968e1312c","name": "薪资管理部","code": "XZGLB","manager": "管理员","introduce": "薪资管理部","createTime": "2021-03-14 22:47:25"},{"id": "6051ad90e93db6522c1d00d2","pid": "","name": "技术部","code": "JSB","manager": "孙财","introduce": "技术部","createTime": "2021-03-17 15:18:23"},{"id": "6051adb6e93db6522c1d00d3","pid": "6051ad90e93db6522c1d00d2","name": "Java研发部","code": "JYFB","manager": "管理员","introduce": "JAVA研发部","createTime": "2021-03-17 15:18:23"},{"id": "6051add6e93db6522c1d00d4","pid": "6051ad90e93db6522c1d00d2","name": "Python研发部","code": "PYFB","manager": "罗晓晓","introduce": "Python研发部","createTime": "2021-03-17 15:18:23"},{"id": "6051adefe93db6522c1d00d5","pid": "6051ad90e93db6522c1d00d2","name": "Php研发部","code": "PhpYFB","manager": "孙财","introduce": "Php研发部","createTime": "2021-03-17 15:18:23"},{"id": "6051ae03e93db6522c1d00d6","pid": "","name": "运营部","code": "YYB","manager": "孙财","introduce": "运营部","createTime": "2021-03-17 15:18:23"},{"id": "6051ae15e93db6522c1d00d7","pid": "","name": "市场部","code": "SCB","manager": "孙财","introduce": "市场部","createTime": "2021-03-17 15:18:23"},{"id": "6051ae28e93db6522c1d00d8","pid": "6051ae15e93db6522c1d00d7","name": "北京事业部","code": "BJSYB","manager": "孙财","introduce": "BJSYB","createTime": "2021-03-17 15:18:23"},{"id": "6051ae3de93db6522c1d00d9","pid": "6051ae15e93db6522c1d00d7","name": "上海事业部","code": "SHSYB","manager": "文吉星","introduce": "上海事业部","createTime": "2021-03-17 15:18:23"}]

将平铺结构转换为树形结构

function tranListToTreeData(list) {// 定义两个变量 一个用来解决映射关系 更快速的匹配到id对应的数据const map = {}// 存放最后生成的树形数组const treeList = []// 目前数组还是平铺状态,先做好映射关系list.forEach(item => {// 这样map这个对象里面的键值对 就是id和数据的对应关系map[item.id] = item})list.forEach(item => {// 无论是item 还是parent 都是一个对象 涉及浅拷贝 拿的都是地址const parent = map[item.pid]if (parent) {if (!parent.children) {parent.children = []}parent.children.push(item)} else {treeList.push(item)}})return treeList
}

之前的数据结构

现在的数据结构

三、对数组相关的查询常见方法。

1、找出数组中的最大数

const arr = ['1', '2', '3', '4']console.log('找出来最大值', Math.max.apply(null, arr))

2、找出数组中的最小数

const arr = ['1', '2', '3', '4']console.log('找出来最小值', Math.min.apply(null, arr))

四、数组常见的一些工作场景

前端工作常见数组数据处理的一些场景总结_码路老默007的博客-CSDN博客

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

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

相关文章

smartsofthelp 7.0 最简单的代码生成器

这是一款值得开发人员认真研究的软件 https://pan.baidu.com/s/1xjDL5QypcRJ5neulUPFmWQ?pwdgedx 1.查询数据库死锁相关信息 2.查看数据库的链接情况 3.当前实例上的所有用户 4.创建数据库独立密码 5.查看数据库使用的端口号 6.当前数据库设置的最大连接数 7.当前数据库最大的…

淡入淡出transition: right 1s

transition: right 1s; //重点直接改变right值 操作过快 这里用该方法实现1s内淡入淡出 达到效果目标

JS PromiseLike 的判定与使用

目录 一. $.ajax()返回值遇到的问题二. Promise A 规范三. 判断是否为PromiseLike3.1 判断ES6的new Promise()3.2 判断包含then方法的对象3.3 判断$.ajax()返回的对象 一. $.ajax()返回值遇到的问题 当我们执行如下js代码时,可以看到$.ajax()执行后,得到…

Linux python安装 虚拟环境 virtualenv

根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境,前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 sourcepippip /venvs/zen-venv/bin/activatepinpi 安装flask pip…

【C语言】深入解开指针(四)

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

ubuntu借助overlay方案实现重启自动还原

配置重启还原OS 首先:sudo apt install overlayroot 安装一下软件 然后编辑配置文件:/etc/overlayroot.conf * overlayroottmpfs or overlayroottmpfs:PARAMETERS write all changes to a temporary (ram only) backing device A tmpfs mount will …

ubuntu22.04安装wvp-gb28181-pro 2023-11-23最新版本(一键安装)

下载程序 输入下面命令,输入普通用户密码,切换到 root用户 sudo su git clone -b ubuntu_wvp_online_install_2023_0425 https://gitcode.net/zenglg/ubuntu_wvp_online_install.git 等待下载完成 安装 进入到克隆下来的路径中 cd /home/tuners/ub…

让国内AI模型解题:滑动窗口中找出最大值,文心一言,通义千问错误率100%,讯飞星火略胜一筹

最近,一些大厂陆续放出了自己的AI模型,处于日常的使用和准确度,我通过一道试题来看一下文心一言、讯飞星火和通义千万的回答结果 本道题是一道很经典的算法题,请在滑动窗口中找出最大值 文心一言 第一次给出答案 package main…

vue中v-if与v-for的优先级?

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中v-if与v-for的优先级? 目录 v-if和v-for的优先级是什么? 一、作用 二、优先级…

移动机器人,开启智能柔性制造新篇章

智能制造是当今工业发展的必然趋势,而柔性制造则是智能制造的重要组成部分。在这个快速变革的时代,如何提高生产效率、降低成本、增强灵活性成为了制造业的关键挑战。富唯智能移动机器人应运而生,为柔性制造注入了新的活力。 基于富唯智能AI-…

凸问题与非凸问题

凸函数:曲线上任意两点连线上的点对应的函数值不大于该两点对应的函数值得连线上的值,例如yx^2; 非凸函数:曲线上任意两点连线上的点对应的函数值既有大于该两点对应的函数值得连线上的值的部分也有小于的部分,例如&am…

Re51:读论文 Language Models as Knowledge Bases?

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Language Models as Knowledge Bases? ArXiv网址:https://arxiv.org/abs/1909.01066 官方GitHub项目:https://github.com/facebookresearch/LAMA 本文是2019年…

软件测试个人求职简历该怎么写,模板在这里

1、个人资料 姓名:xxx性别:x 手机号码:138888888xx邮箱:xxx 学历:本科专业:电子商务 英语:四级当前工作:测试工程师 从业时间:4年期望薪资:面议 求职意向软件…

FIB表与快速转发表实验

实验名称:FIB表与快速转发表实验 网络拓扑图: 实验步骤: 1、配置接口的IP地址 R1: R2: 2、配置OSPF路由协议 在R1宣告网段 在R2宣告网段 3、查看邻居状态,一直处于2-way状态,要等待30秒&…

SAP 权限设置维护

权限设置维护 su21 点击创建自己的 对象类(OBJECT CLASS ) Z... 在点击创建授权对象 输入对象名 z... 对象名文本 字段名:ACTVT 点击允的许活 按钮 里面增删改查等权限.... 保存 .权限对象 保存后需要 pfcg 配置权限对象 分…

如何将音频添加到视频并替换视频中的音轨

随着视频流媒体网站的流行和便携式设备的发展,你可能越来越倾向于自己制作视频并在互联网上分享。有时,你可能还需要编辑视频并为其添加背景音乐,因为音乐总是对视频的感知起着神奇的作用。 那如何给视频添加音频呢?或者如何用新…

阿里云跨账号建立局域网

最近有活动,和好友一并薅了下阿里云的羊毛。琢磨着两台机器组一个局域网,于是有了这个需求,把步骤记录一下: 假设两台机器叫A和B,我们开始进行建立和组网 1. 建立ECS 把A机器公共环境装好,然后使用《实例与…

深入解析Java 8中HashMap的底层原理

引言 HashMap是Java中常用的集合类,用于存储键值对。其底层实现经过多次优化,包括哈希算法、数组扩容、链表转红黑树等。本文将深入研究HashMap的底层原理,并详细探讨如何解决哈希碰撞的技术。 1. 哈希算法 HashMap的核心是哈希算法&#…

【运动规划】191 自适应跟踪kinodynamicrrt的路径

分层法: two layer approach 自适应控制,跟随轨迹。运动规划:扩展自由空间(基于速度约束缩小自由空间)为控制部分留余量,确保安全。 控制设计: 考虑平移和旋转,速度环控制&#xff…

银河麒麟安装Docker

# 配置阿里云 Centos8 镜像源,需要额外的一些依赖,而这些依赖在麒麟官方的源里面是没有的 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo# 配置阿里云 docker 镜像源 sudo yum-config-manager --add-r…