前端数组方法汇总集锦

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

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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

循环队列详解!!c 语言版本(两种方法)双向链表和数组法!!

目录 1.什么是循环队列 2.循环队列的实现(两种方法) 第一种方法 数组法 1.源代码 2.源代码详解!! 1.创造队列空间和struct变量 2.队列判空 3.队列判满(重点) 4.队列的元素插入 5.队列的元素删除 …

网络工程师-HCIA网课视频学习(更换策略,这个网课质量不行)

这里是速成的,只积累下,自己未曾学习到的东西。通过书本补充知识点。 视频:hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性: hcia17-链路聚合: 由于如果根据视频来学习的话,感觉视频的总结并不…

MySQL数据库常见错误及解决方案

“时记数据安全,共享优质资源”,数据库安全是指数据库数据的完整、真实、可靠和可用性。数据库也是一种软件系统,与其他软件系统一样也需要保护,需要采取一定的技术和一定的安全管理策略,保证数据库中的数据不被泄漏、不被破坏、不被修改或删除。本文列举MySQL数据库常见错…

VulnHub DC-9

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

如何做好性能压测?压测环境设计和搭建的7个步骤你知道吗?

简介:一般来说,保证执行性能压测的环境和生产环境高度一致是执行一次有效性能压测的首要原则。有时候,即便是压测环境和生产环境有很细微的差别,都有可能导致整个压测活动评测出来的结果不准确。 1. 性能环境要考虑的要素 1.1 系…

HCIA-Datacom跟官方路线学习

通过两次更换策略。最后找到最终的学习方案,华为ICT官网有对这个路线的学习,hcia基础有这个学习路线,hcip也有目录路线。所以,最后制定学习路线,是根据这个认证的路线进行学习了: 官网课程:课程…

掌握 AI 和 NLP:深入研究 Python — 情感分析、NER 等

一、说明 我们见证了 BERT 等预训练模型在情感分析方面的强大功能,使我们能够破译隐藏在文本数据中的情感。通过 SpaCy,我们探索了命名实体识别的迷人世界,揭开了隐藏在非结构化文本中的秘密。 二、问题陈述 命名实体识别(NER)是自然语言处理中的一项关键…

2024贵州大学计算机考研分析

24计算机考研|上岸指南 贵州大学 贵州大学计算机科学与技术学院(贵州大学省级示范性软件学院)位于贵州省贵阳市花溪区贵州大学东校区。 计算机科学与技术学院(软件学院)自1972年创办计算机软件本科专业开始,至今已有…

灵活运用Vue 3中的setup函数—深入解析Composition API

新建项目,项目主入口为App.vue(主组件),新建child.vue(子组件)。 1.1 setup 执行 时机问题 1.在主组件里引入子组件和ref: import {ref} from vue import child from ./components/child.vue2…

12英寸双轴半自动划片机:颠覆传统划切工艺的五大优势

随着科技的飞速发展,半导体行业对精密划切设备的需求日益增长。在这篇文章中,我们将深入探讨12英寸双轴半自动划片机的优势,这种划片机在半导体制造过程中扮演着至关重要的角色。以下是这种划片机的五大优势。 一、高精度划切 12英寸双轴半自…

二十二、数组(4)

本章概要 随机生成泛型和基本数组 随机生成 我们可以按照 Count.java 的结构创建一个生成随机值的工具: Rand.java import java.util.*; import java.util.function.*;import static com.example.test.ConvertTo.primitive;public interface Rand {int MOD 10_0…

89. 格雷编码

89. 格雷编码 Java代码&#xff1a;2DFS class Solution {List<Integer> res new ArrayList<>();public List<Integer> grayCode(int n) {dfs(n, new StringBuffer(), new int[]{0, 1});return res;}public void dfs(int n, StringBuffer sb, int[] nums){i…

如何用【测试思维】做“支付功能”测试?

前言 跳槽高峰期&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中&#xff1a; “说说你项目中的 xx 模块你是如何测试的&#xff1f;” “给你一个购物车&#xff0c;你要怎么测试&#…

马斯克震撼演讲:我想创立一个新世界

目录 1拼多多杀入大模型领域&#xff1a;年薪百万招聘人才 2马斯克震撼演讲&#xff1a;我想创立一个新世界 3文心4.0上线首交答卷&#xff1a;百度2023Q3成色如何 1拼多多杀入大模型领域&#xff1a;年薪百万招聘人才 快科技11月22日消息&#xff0c;据国内媒体报道&#x…

解决ESP32内部RAM内存不足的问题

一&#xff0c;为什么需要外部RAM ESP32有520kB的内部RAM空间可以使用&#xff0c;这对于一般的情况是够用的&#xff0c;但是如果设备需要涉及音频或者显示图像等处理时&#xff0c;需要更大的内存空间来处理这些数据。ESP32支持扩展外部RAM&#xff0c;其实乐鑫已经在其ESP32…

2020年计网408

第33题 下图描述的协议要素是&#xff08; &#xff09;。I. 语法 II. 语义 III. 时序 A. 仅 I B. 仅 II C. 仅 III D. I、II 和 III 本题考察网络协议三要素的相关知识。 网络协议的三要素分别是语法、语义、同步&#xff08;时序&#xff09;。语法&#xff1a;定义收发双…

【PyGIS】使用阿里AIEarth快速下载指定区域指定年份的土地利用数据

说明 中国逐年土地覆盖数据集(CLCD) 由武汉大学的杨杰和黄昕教授团队基于Landsat影像制作了中国逐年土地覆盖数据集(annual China Land Cover Dataset, CLCD),数据包含1985—2021年中国逐年土地覆盖信息。研究团队基于Landsat长时序卫星观测数据,构建时空特征,结合随机森…

lombok 引入

lombok 依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

智能车入门补充篇——电感值处理、转向控制与巡线

冒泡法 冒泡法是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。冒泡排序的时间复杂度为O(n^…

国内怎么投资黄金,炒黄金有哪些好方法?

随着我国综合实力的不断强大&#xff0c;投资市场的发展也日臻完善&#xff0c;现已成为了国际黄金市场的重要组成部分&#xff0c;人们想要精准判断金市走向&#xff0c;就离不开对我国经济等信息的仔细分析。而想要有效提升盈利概率&#xff0c;人们还需要掌握国内黄金投资的…