前端数组方法汇总集锦

news2024/11/13 9:48:53

前言
数组主要使用场景有:
存储和处理数据:数组是一种有序的数据结构,可以用来存储和处理多个相关的数据。在前端开发中,我们经常使用数组来存储和处理列表、表格、选项等数据。
循环和遍历:数组提供了循环和遍历的功能,可以方便地对数组中的每个元素进行操作。在前端开发中,我们经常使用循环和遍历来处理列表、表格、选项等数据。
数据过滤和转换:数组提供了一些方法可以对数组进行过滤和转换。例如,我们可以使用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) // 2
    const num1 = arr6.indexOf(6) // 查找 6 出现的索引 找不到为-1
    console.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) // 判断数组中每一个元素是否都大于0
    console.log(res); // true
    const res2 = array5.every(item => item > 30) // 判断数组中每一个元素是否都大于30
    console.log(res2); 

 1.17 some

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

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

1.18 join

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

const elements = ['Fire', 'Air', 'Water'];

    const res6 = elements.join() // 将数组中每一个元素用逗号连接
    console.log(res6); // Fire,Air,Water

    const res4 = elements.join('-') // 将数组中每一个元素用-连接
    console.log(res4); // Fire-Air-Water

    const res5 = elements.join('') // 将数组中每一个元素用''连接
    console.log(res5); // FireAirWater

 1.19 reduce

计算数组所有元素的总和

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

 1.20 forEach

数组循环遍历

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

 

二、 将平铺的数组结构转换为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
}

之前的数据结构

现在的数据结构

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

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

相关文章

three.js学习总结超详细附带素材及源码

three.js学习总结超详细附带素材及源码 安装three.js npm install --save three引入three.js import * as THREE from threethree.js结构 three.js坐标 创建一个场景 scene场景,camera相机,renderer渲染器 创建一个场景 this.scene new THREE.Scene(…

Redis 性能管理 主从复制与哨兵模式

目录 redis性能管理 内存碎片率 如何清理内存 面试题 Redis雪崩 Redis集群大面积故障 面试:Redis的缓存击穿 Redis的缓存穿透 Redis的集群高可用方案 redis的主从复制 哨兵模式 redis性能管理 redis的数据缓存在内存当中 info memory #在redis数据库中查…

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后,贴入导出文件的文件夹,然后按F2即可导出到目标文件夹。

软件测试工具常用的都有哪些

软件测试工具是用于辅助软件测试的软件工具,可以帮助测试人员执行测试用例、记录测试结果、跟踪缺陷状态等,提高测试效率和质量。以下是一些常见的软件测试工具: 一、AutoRunner自动化测试工具 AutoRunner(简称AR)是国内自主研发…

如何防止网络被入侵?

随着互联网的普及,网络安全问题越来越受到人们的关注。其中,如何防止网络被入侵是一个重要的问题。本文将介绍一些防止网络被入侵的方法,帮助大家保护自己的网络安全。 一、使用强密码 强密码是防止网络被入侵的第一道防线。一个好的密码应该…

d3dcompiler_47.dll缺失怎么修复,d3dcompiler_47.dll的作用有哪些

d3dcompiler_47.dll丢失是一种常见的电脑问题。如果你遇到了这个问题,不要惊慌,下面的方法可以帮助你解决。本文将详细介绍解决d3dcompiler_47.dll丢失问题的步骤,让你手把手地学会。 一.解决d3dcompiler_47.dll丢失问题的步骤 解决方法一&a…

2.4G无线收发芯片 XL2400P使用手册

XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射 频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模 式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外…

驶入产业发展快车道,汉鑫科技人工智能研发中心正式启用!

11月18日,汉鑫科技人工智能研发中心正式启用。中心立足烟台,服务全国,聚焦工业智能、智能网联、智慧城市三大业务板块,以人工智能技术赋能政企实现“数智化”转型升级。该中心的启用标志着汉鑫科技在人工智能研发应用领域迈上了新…

JavaFx学习问题3---Jar包路径问题 (疑难杂症)

文章目录 前置提要:解决方法:调试JAR包后续补充: 前置提要: 我做了的JavaFx程序中,需要通过一个文件夹的相对路径,获取文件夹下所有音频文件的路径,把这些路径字符串放到一个List集合里,然后用Media让它播放声音。问题…

UVA11584划分成回文串 Partitioning by Palindromes

划分成回文串 Partitioning by Palindromes 题面翻译 回文子串(palind) 问题描述: 当一个字符串正序和反序是完全相同时,我们称之为“回文串”。例如“racecar”就是一个回文串,而“fastcar”就不是。现在给一个字符串s,把它分…

【擎标】CCID信息系统服务商交付能力等级认证标准

为顺应信息技术服务业发展趋势及市场需求,维护市场秩序,加强行业自律,促进信息系统服务商交付能力的不断提高,增强信息系统服务商创新能力和国际竞争力,支撑信息系统服务商转型提升,中国软件行业协会、企业…

数字化时代,企业数据治理成熟度如何建设

企业数字化转型不是从0到1,而是从1到100。转型是一个过程,场景从简单到复杂,应用从局部到广泛,持续优化、逐步成长。 数据治理的成熟度评估模型 可以说,几乎所有成熟度模型都借鉴了CMM的思路,基本都是将所…

2023 极客巅峰线上

linkmap 考点: 栈溢出ret2csu栈迁移 保护: 开了 Full RELRO 和 NX, 所以这里不能打 ret2dl 题目给了一些有用的函数: 在这个函数中, 我们可以把一个地址的数据存放到 BSS 段上. 漏洞利用 可以把一个 libc 地址比如 readgot 读取到 bss 上, 然后在修改其为 syscall. 后面就是…

Grafana Panel组件跳转、交互实现

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

实验4.数据全量、增量、比较更新

【实验目的】 1.利用Kettle的“表输入”,“表输入出”,”JavaScript代码”组件,实现数据全量更新。 2.熟练掌握“JavaScript代码”,“表输入”,“表输入出”组件的使用,实现数据全量更新。 【实验原理】 …

软件第三方测评报告可作哪些用途?

软件第三方测评报告是指由独立、中立的第三方机构对软件进行全面、客观、科学的评估和分析后所做的报告。该报告基于系统而严密的评测流程,通过多项指标和标准,对软件的性能、功能、易用性、安全性等方面进行评价,为用户提供一个权威、可靠的…

D. Absolute Beauty - 思维

题面 分析 补题。配上题解的图,理解了很长时间,思维还需要提高。 对于每一对 a i a_i ai​和 b i b_i bi​,可以看作一个线段的左右端点,这是关键的一步,那么他们的绝对值就是线段的长度,对于线段相对位…

PaddleOCR 运行退出0xC0000409,不显示错误信息

在一台老的电脑上去运行PaddleOCR 时,发现程序输出ppocr DEBUG: Namespace后,返回错误码0xC0000409执行到ocr就闪退,不提示。 原因:PaddleOCR 吞了输出。 解决方案 需要改下Pycharm的运行选项,勾选重定向也就是在输出…

Influence Matters 成立印度尼西亚办公室,构建北亚及东南亚服务中心

2023 年 11 月 22 日——过去八年,Influence Matters致力于通过高效的公关传播服务,为跨境B2B 科技企业耕耘中国市场提供业务支持。我们已与近百家企业、组织和政府合作,以远超预期的公关传播方案和执行力,为客户与其目标决策者和…

Windows配置Anaconda环境

1、下载Anaconda 2、安装Anaconda 2.1、系统环境变量 注: 将Anaconda添加到系统环境变量中,此处建议选中,可以省去好多麻烦 2.2、手动配置环境变量 系统—高级系统设置—环境变量—Path—新建;将下面的路径添加到环境变量中…