本文 GitHub github.com/ponkans/F2E 已收录,有一线大厂前端面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习。文末有福利~~

前言

数组是JS最常见的一种数据结构,我们在开发中会经常用到,并且JS中数组操作函数还是非常多的,很容易出现弄混或者概念不清晰,写下这篇文章就是想来总结一下,也算是对细节的一个知识大扫盲!!!

JS中的Array方法

新建数组

  • 常规方式

    let temp = new Array();temp[0] = 123;temp[1] = "string";temp[2] = true;console.log(temp[0]); // 123console.log(temp[3]); // undefined
    
    let temp2 = new Array(2);// 规定了数组的长度为2temp2[0] = 123;temp2[1] = "string";temp2[2] = true; //虽然规定了数组长度,但仍可以再次添加元素,定义的数组大小对此没有影响
  • 简洁方式

  • 数组文本方式

    let temp = [123, 
  • 注意

    • 出于简洁、可读性和执行速度的考虑,推荐使用最后一种数组文本方法。

    • 数组内可以存放任意类型的数据

    • 数组元素不赋值,则为undefined

    • 访问数组范围以外的元素时,不会出现越界异常,为undefined

    • 定义了数组大小,依然可以添加更多的元素

增删改查

  • 栈方法push & pop增删数组元素

    这两个方式都是对数组尾部进行压入和弹出操作。

    push(arg1, arg2, …)可以每次压入一个或多个元素,并返回更新后的数组长度。

    pop()函数则每次只会弹出尾部的元素,并返回弹出的元素,若对空数组调用pop()则返回undefined。会更改源数组。

    let temp = [123, "string", true];
    
    let push1 = temp.push(456); // 插入一个元素console.log(push1, temp); // 4, [123, "string", true, 456]
    
    let push2 = temp.push(789, "string2", false); // 插入多个元素console.log(push2, temp); // 7, [123, "string", true, "456", 789, "string2", false]
    
    let temp2 = [123];
    
    let pop1 = temp2.pop();console.log(pop1, temp2);// true, [];
    
    let pop2 = temp2.pop();console.log(pop2, temp2); // undefined, [];
  • 队列方法shift & unshift增删数组元素

    这两个方式都是对数组头部进行位移与弹出操作。

    unshift(arg1, arg2, …)可以像数组的头部添加一个或多个元素,并返回更新后的数组长度,并把所有其他元素位移到更高的索引。

    shift()方法会删除首个数组元素,并返回弹出的元素,并把所有其他元素位移到更低的索引。会更改源数组。

  • delete删除数组元素

    JS数组属于对象,所以可以使用 JavaScript delete 运算符来删除,但这种方式会在数组留下未定义的空洞,所以很少使用。 会更改源数组。

    let temp = [
  • splice增删数组元素

    splice(arg1, arg2, arg3, …)第一个参数定义了新添加元素的位置,第二个参数定义应删除多少元素,其余参数定义要添加的元素,并返回一个包含已删除项的数组。

    splice还可以在数组不留空洞的情况下删除元素。会更改源数组。

  • concat合并数组

    合并现有数组来创建一个新的数组,concat(arg1, arg2, …)不会更改现有数组,总是返回一个新的数组,可以使用任意数量的数组参数。不会更改源数组。

    let temp1 = [
  • 操作符合并数组,不会更改源数组。

    let temp1 = [
  • slice裁剪数组

    slice(arg1, arg2) 方法用数组的某个片段切出新数组,不会修改源数组中的任何元素,返回一个新数组,第一个参数为元素选取开始位置,第二个参数为元素选取结束位置,如果第二个参数被省略则会切除数组的剩余部分。不会更改源数组。

    let temp = [
  • Math.max查数组最大值

    Math.max.apply(arg1,arg2)参数不支持数组

    可以用Math.max.apply(null,arr)来获取数组中的最大值

  • let temp = [
  • Math.min查数组最小值

    Math.min.apply(arg1,arg2)参数不支持数组

    可以用Math.min.apply(null,arr)来获取数组中的最小值

    let temp = [
  • JavaScript方法查数组最大值

    function getArrayMaxValue(arr) {
  • JavaScript方法查数组最小值

    function getArrayMinValue(arr) {
  • 查找索引

    indexOf(arg1, arg2)方法在数组中搜索元素值并返回其位置。arg1为搜索元素,arg2可选从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。

    lastIndexOf(arg1,arg2) 与 indexOf() 类似,但是从数组结尾开始搜索。arg2可选从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到开头。

    findIndex() 方法返回通过测试函数的第一个数组元素的索引。

    let temp = [
  • 查找值

    find(function(arg1,arg2,arg3)) 方法返回通过测试函数的第一个数组元素的值。arg1为数组元素值, arg2为数组元素索引,arg3为数组本身。

    let temp = [
  • 注意

    • splice和slice容易混淆,记住splice翻译是拼接,slice翻译是切片。

    • splice 会返回被删除元素组成的数组,或者为空数组

    • pop,shift会返回那个被删除的元素

    • push,unshift 会返回新数组长度

    • pop,push,shift,unshift,splice会改变源数组

    • indexOf,lastIndexOf,concat,slice 不会改变源数组

数组转换

  • toString数组转字符串

    toString()方法把每个元素转换为字符串,然后以逗号连接输出显示, 不会更改源数组。

  • join数组转字符串

    join()方法可以把数组转换为字符串,不过它可以指定分隔符。

    在调用 join() 方法时,可以传递一个参数作为分隔符来连接每个元素。

    如果省略参数,默认使用逗号作为分隔符,这时与toString()方法转换操作效果相同。不会更改源数组。

    let temp = [
  • split字符串转数组

    split(arg1, arg2)方法是 String 对象方法,与join()方法操作正好相反。该方法可以指定两个参数,第一个参数为分隔符,指定从哪儿进行分隔的标记;第二个参数指定要返回数组的长度。

    let temp = 
  • 对象转数组

    let temp = {
  • 数组转对象

    let temp = [

注意

toString, join不会改变源数组

数组排序

  • sort数组排序

    sort按照字母顺序对数组进行排序, 直接修改了源数组,所以可以不用再将返回值赋给其他变量。

    该函数很适合字符串排序,如果数字按照字符串来排序,则 "25" 大于 "100",因为 "2" 大于 "1",正因如此,sort()方法在对数值排序时会产生不正确的结果。

    可以通过修正比值函数对数值进行排序。比较函数的目的是定义另一种排序顺序。比较函数应该返回一个负,零或正值,当 sort() 函数比较两个值时,会将值发送到比较函数,并根据所返回的值(负、零或正值)对这些值进行排序。会更改源数组。

    "bi", 
  • reverse数组反转

    reverse()反转数组中的元素,直接修改了源数组。

    let temp = [
  • 注意

sort,reverse会更改源数组

数组迭代

数组迭代即对每个数组项进行操作

  • Array.forEach()

    forEach(function(arg1,arg2,arg3){})方法为每个数组元素调用一次函数(回调函数),arg1为数组元素值, arg2为数组元素索引,arg3为数组本身, 此方法不会更改源数组,也不会创建新数组。

    let temp = [
  • Array.map()

    map(function(arg1,arg2,arg3){})方法通过对每个数组元素执行函数来创建新数组,arg1为数组元素值, arg2为数组元素索引,arg3为数组本身,方法不会对没有值的数组元素执行函数,不会更改源数组,创建一个新数组。

    let temp = [
  • Array.filter()

    filter(function(arg1,arg2,arg3){})方法创建一个包含通过指定条件的数组元素的新数组, arg1为数组元素值, arg2为数组元素索引,arg3为数组本身,不会更改源数组。

    let temp = [
  • Array.every()

    every(function(arg1,arg2,arg3){})方法测试数组的所有元素是否通过了置顶条件。arg1为数组元素值, arg2为数组元素索引,arg3为数组本身。不会更改源数组。

    let temp = [
  • Array.some()

    some(function(arg1,arg2,arg3){})方法测试数组中是否有元素通过了指定条件的测试。不会更改源数组。

    let temp = [
  • Array.reduce()

    reduce(function(arg1,arg2,arg3,arg4){})接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。

    arg1上一次调用回调返回的值,或者是提供的初始值(initialValue),arg2为数组元素值, arg3为数组元素索引,arg4为数组本身。不会更改源数组。

    let temp = [
  • 普通for循环

    性能比较好

    let temp = [
  • for…in

    let temp = [
  • for…of

    for..of 是es6中引进的循环,主要是为了补全之前for循环中的以下不足

    let temp = [
  • 跳出循环

    • forEach跳出循环

      let temp = [1,2,3,4];
    • map跳出循环

      let temp = [1,2,3,4];
    • filter跳出循环

      let temp = [1,9,2,3,4];
    • every跳出循环

      let temp = [1,9,2,3,4];
    • some跳出循环

      let temp = [1,9,2,3,4];
    • for跳出循环

      let temp = [1,9,2,3,4];
    • for…in跳出循环

      let temp = [1,9,2,3,4];
    • for…of跳出循环

      let temp = [1,9,2,3,4];
    • 汇总表格:


  • 注意

    • forEach,map,filter,every,some,reduce这些迭代方法不会改变源数组

    • some 在有true的时候停止

    • every 在有false的时候停止

其他常用操作

  • 检测数组

    let temp1 = [
  • 洗牌算法

    将一个数组打乱,返回一个打乱的数组

    let temp = [
  • 数组去重

    let temp = [1,3,5,6,7,9,4,3,1,6];let unique1 = Array.from(new Set(temp));console.log(unique1);//[1, 3, 5, 6, 7, 9, 4]let unique2 = [...new Set(temp)];console.log(unique2);//[1, 3, 5, 6, 7, 9, 4]let newArr = [];for(let i=0; i<temp.length;i++){if(newArr.indexOf(temp[i]) === -1){newArr.push(temp[i]);    }}console.log(newArr);//[1, 3, 5, 6, 7, 9, 4]-- 数组下标判断法: 如果在arr数组里面找当前的值,返回的索引等于当前的循环里面的i的话,那么证明这个值是第一次出现,所以推入到新数组里面,如果后面又遍历到了一个出现过的值,那也不会返回它的索引,indexof()方法只返回找到的第一个值的索引,所以重复的都会被pass掉,只出现一次的值都被存入新数组中。 -->
  • 数组去虚值

    虚值有 false, 0,'', null, NaN, undefined

    let temp = [
  • 用数据填充数组

    let  arr = 
  • 数组中获取随机值

    根据数组长度获取一个随机索引。

    let arr = [

硬核的文章像极了爱情,刚开始兴奋就要结束了,非常感谢各位小伙伴能够看到这里,如果觉得文章还有点东西,求点赞

易语言数组转文本_前端基础扫盲系列 长达8000字的数组总结相关推荐

  1. delete 字符数组 []_前端基础扫盲系列 长达8000字的数组总结

    本文 GitHub github.com/ponkans/F2E 已收录,有一线大厂前端面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习.文末有福利~~ 前言 数组是 ...

  2. MFC/C++调用易语言的整数型+文本型与VS2010互动

    MFC/C++调用易语言的整数型+文本型与VS2010互动 版权说明:转载请注明,转自郑军学长(MFC/C++调用易语言的整数型+文本型与VS2010互动),http://www.cnblogs.co ...

  3. 易语言json置入_易语言取置JSON文本使用方法-易语言学习-猴子技术宅

    什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON到底是什么? JSON就是一串字符串 只 ...

  4. c语言如何答应出数所在数组的下标_零基础学C语言——数组

    这是一个C语言系列文章,如果是初学者的话,建议先行阅读之前的文章.笔者也会按照章节顺序发布. 上一篇我们讨论过函数,其中涉及到了一些数组和指针,本篇详细说明数组. 数组定义 数组是一种集合结构,与数学 ...

  5. 易语言mysql列表框_详谈易语言的列表框

    群里有人问的,其实易语言中的列表框是我们在开发程序时经常用到的一个东西,我在开发酷Q插件的时候也屡次用到,不得不说,它是不可缺的一个窗口控件. 拿我的"真心话大冒险"酷Q插件举例, ...

  6. 易语言mysql修改语句_易语言-MySQL-update源码例程

    易语言中MySQL的update可以用两种方式来对字段进行更新,下面就这两种方式贴出源码.涉及的数据库在文章易语言-MySQL-select源码例程..版本 2 .支持库 MySQL .程序集 窗口程 ...

  7. 易语言json置入_易语言json操作模块源码

    易语言json操作模块源码 系统结构:初始化,解析,到文本,置属性,置属性对象,置属性数值,取属性数值,取属性对象,取通用属性,取属性,成员数,加成员,取成员,取成员文本,置成员,删成员,置类型,赋值 ...

  8. 易语言晨风机器人源_易语言FQ自动聊天机器人源码,易语言自动聊天插件制作源码...

    自动聊天插件制作易语言源码 系统结构:加入消息记录,智能处理消息,加载插件信息,保存词库,词库初始化,关键词查询,加载词库,初始化插件,加入命令,处理命令,取插件,调用插件,取插件信息,时间, === ...

  9. 易语言取主板型号_易语言获取本机信息源码

    易语言获取本机信息源码 @flfkhn2.版本 2 .支持库 iext .支持库 sock .支持库 internet .支持库 eAPI .子程序 取硬盘信息, , , ' 本源码来自三叶资源网(w ...

最新文章

  1. RunTime的使用-Category改变整个项目全部字体
  2. 把梯度下降算法变成酷炫游戏,这有一份深度学习通俗讲义
  3. 泰尔指数r语言_还在用Excel算区位基尼系数?用geo.gini吧!
  4. postman 请求 页面出现 Could not get any response 解决方法
  5. 如何解决 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序
  6. android开发 获取父控件的高宽
  7. Visual Studio 2005 Beta2 简体中文版发布
  8. 学生档案管理系统(续)
  9. 基于移位寄存器的序列密码
  10. 文件存储的原理和记事本打开文件的原理
  11. [webpack3.8.1]Guides-4-Output Management(输出管理)
  12. 一般图带权多重匹配(欧拉图+最小费用流)
  13. (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据
  14. 雅马哈发电机换机油教程_康明斯柴油发电机组怠速一会就自动停机是什么故障...
  15. 13、细说装饰器与闭包
  16. Django评论系统
  17. 女朋友都看得懂的服务器搭建(纯小白超详细图文教程,阿里云服务器搭建)
  18. 2022年全球市场聚苯硫醚纤维总体规模、主要生产商、主要地区、产品和应用细分研究报告
  19. python房地产_如何用Python爬虫投资房产,走向人生巅峰?
  20. 买服务器需要看哪些参数,如何看服务器配置

热门文章

  1. SaaSpace:5种最好的免费OCR软件工具
  2. panic: <Ormer> table: `.` not found, make sure it was registered with `RegisterModel()`
  3. plupload实现多文件上传
  4. 事业单位固定资产管理系统软件解决方案
  5. 涌泉蜜桔,无核化渣,绝了
  6. 内置对象(转,侵立删)
  7. 【YAML】YAML语言|YAML配置文件|YAML库用法|相比json的区别优势
  8. python脚本自动qq签到_Python爬虫实现自动登录、签到功能 附代码
  9. PHP中的精确计算bcadd,bcsub,bcmul,bcdiv 及 扩展安装
  10. SAP SD模块中POD功能使用方法