面试专题一:js的数组

前言

想做最全的js数组方法总结。涵盖面试及日常使用。

这里写目录标题

  • 前言
    • 如何判断数组
    • 修改数组元素的方法
    • 检测数组元素的相关方法
    • 一些跟数组相关且传参为回调函数的方法
    • 其他方法
  • 总结

如何判断数组

不可以用typeOf方法。该方法只能用来检验最基本的数据类型,(null、Object、Array打印出来的都是Object);

可以用instanceof:(原理是判断原型链的构造函数)

var arr = [1, 2, 3, 5, 6]
console.log(arr instanceof Array) // true

用原型,一个数组对象,它的constructor应当指向它的构造函数:(异曲同工)

var arr = [1, 2, 3, 5, 6]
console.log(arr.constructor === Array) // true

用Array的方法:

var arr = [1, 2, 3, 5, 6]
console.log(Array.isArray(arr)) // true

修改数组元素的方法

1.最基本的四个:

push() // 在数组尾新增元素
pop() // 删除数组最后一个元素
shift() // 在数组头部新增一个元素
unshift() // 在数组头部删除一个元素

上述四个,都是在原数组上更改。

2.重头戏:数组的增删改——splice()

这个函数内部最少传一个参数,最多传三个参数。且这个函数是在原数组上更改的。

传一个参数:设这个参数为n,则最后的结果为,保留前n个数据。

var arr = [1, 2, 3, 5, 6]
arr.splice(2)
console.log(arr) // [1, 2]

传两个参数:从第一个参数的索引位置开始,截取n个,n为第二个参数。如下面,从索引为2的地方开始,截取一个。

var arr = [1, 2, 3, 5, 6]
var n = arr.splice(2, 1)
console.log(arr) // [1, 2, 5, 6]

传三个参数:用于新增。前两个参数意义不变,第三个参数是在当前处理完之后的地方新增一个数。如下面,在索引为2的位置截取一个字符串后在此位置新增一个4。

var arr = [1, 2, 3, 5, 6]
var n = arr.splice(2, 1, 4)
console.log(arr) // [1, 2, 4, 5, 6]

检测数组元素的相关方法

1.indexOf()
这个方法用来判断该数组是否存在某一个值,如果不存在,则返回-1,如果存在,则返回第一次出现的索引;

2.lastIndexOf
这个方法用来判断该数组是否存在某一个值,如果不存在,则返回-1,如果存在,则返回最后一次出现的索引;

3.includes
判断数组中是否存在…,返回值是布尔值,存在为true,不存在为false;

一些跟数组相关且传参为回调函数的方法

1.forEach((a, b, c) => {})
a:当前遍历的数组元素;
b:参数对应的数组索引;
c:数组本身;

如果要改动某一个值,可以通过forEach:

arr.forEach((x, i, array) => {array[0] = 999console.log(array)
})

但不能直接在第一个参数上作更改。

2.map((a, b, c) => {})
参数和forEach中的一样。但是map经常和forEach放在一起比较。

先说说map吧,map内部一定要带一个return,return才可以操作每一个元素;并且map并不改变原数组,需要找一个新的数组去接收。

var arr1 = [1, 2, 3]
var arr1 = arr.map((current, index, array) => {return current = 6
})
console.log(arr1) // [6, 6, 6]

而forEach就不需要了。forEach在用的时候,只能通过数组名[索引值]来对其进行操作,不需要return,并且是在原数组的基础上进行改变的。

3.every((x) => {})和some((x) => {})
回调就一个参数。参数是当前遍历的数组元素。这两个都用于判断数组是否符合条件,返回布尔值。

var arr = [1, 2, 3, 5, 6, 6]
var result = arr.every((x) => {return x == 5
})
console.log(result) // false
var arr = [1, 2, 3, 5, 6, 6]
var result = arr.some((x) => {return x == 5
})
console.log(result) // true

every:全部都满足返回true;some:有一个满足则为true。

其他方法

1.join()
这个方法可以把数组中的元素转化为字符串。不改变原数组。

var arr = [1, 5, 6]
console.log(arr.join(',') // 1,5,6
console.log(arr) // [1, 5, 6]

2.reverse()
这个方法是改变原数组的

var arr = [1, 5, 6]
console.log(arr.reverse()) // [6, 5, 1]
console.log(arr) // [1, 5, 6]

3.sort()
这个方法是改变原数组的,sort默认从小到大进行排序。

怎样才可以从大到小排序?

arr.sort(() => {return -1
})

按照这样固定的写法即可。

4.for in 与 for of
for in 中,定义的变量是索引,arr[i]是数组的每一项

let arr = [1, 4, 3, 8, 6]
for(let i in arr) {console.log(i) // 0, 1, 2, 3, 4, 5console.log(arr[i]) // 1, 4, 3, 8, 6
}

for of中

for(let i of arr) {console.log(i) // 1, 4, 3, 8, 6
}

一般用for in遍历对象,用for of遍历数组,后面有机会会单出一篇这两个的对比。

总结

判断是否是数组的方法:

不可用typeOf
可以用instanceOf、constructor、isArray

修改数组的方法

改变原数组:push、pop、shift、unshift、splice、reverse、sort
不改变原数组:join

查找数组元素

indexOf、lastIndexOf、includes

遍历数组的方法

forEach(不带return,不能直接修改元素)
map、every、some(都带return,map用来遍历,直接修改i;every,some用来判断)
for in(遍历对象,不建议遍历数组)、for of(遍历数组,不建议遍历对象)

后面还会出更多专题,欢迎关注~

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

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

相关文章

构建安全可靠的系统:第十六章到第二十章

第四部分:维护系统 原文:Part IV. Maintaining Systems 译者:飞龙 协议:CC BY-NC-SA 4.0 准备应对不舒适情况的组织有更好的机会处理关键事件。 尽管不可能为可能扰乱您组织的每种情况制定计划,但作为综合灾难规划策略…

接口数据使用了 RSA 加密和签名?一篇文章带你了解

接口数据使用了RSA加密和签名?一篇文章带你搞定! 1、前言 很多童鞋在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加…

并发编程之JUC并发工具类下

目录 CyclicBarrier(回环栅栏或循环屏障) 特点 常用方法 CyclicBarrier应用场景 CyclicBarrier与CountDownLatch区别 Exchanger 特点 常用方法 Exchanger的应用场景 Phaser(阶段协同器) 特点 常用方法 Phaser的应用场…

1991-2022年A股上市公司股价崩盘风险指标数据

1991-2022年A股上市公司股价崩盘风险指标数据 1、时间:1991-2022年 2、来源:整理自csmar 3、指标:证券代码、交易年度、NCSKEW(分市场等权平均法)、NCSKEW(分市场流通市值平均法)、NCSKEW(分市场总市值平均法); NCSKEW(综合市…

MySQL中的临键锁:深入理解与案例解析

一、引言 在数据库中,锁是一种非常重要的机制,用于管理并发操作,确保数据的一致性和完整性。MySQL支持多种类型的锁,其中临键锁(Next-Key Locking)是一种非常重要的锁策略,它结合了行锁和间隙锁…

【Spring 篇】JdbcTemplate:轻松驾驭数据库的魔法工具

欢迎来到数据库的奇妙世界,在这里,我们将一同揭开Spring框架中JdbcTemplate的神秘面纱。JdbcTemplate是Spring提供的一个简化数据库操作的工具,它为我们提供了一种轻松驾驭数据库的魔法。本篇博客将详细解释JdbcTemplate的基本使用&#xff0…

我的 AI 成长星球,邀请你加入

大家好啊,我是董董灿。 2023年终总结时我这个小白坚持写作一整年,赚了多少?提到了一点,2024希望自己创建一个免费星球。 其实一直就想弄一个高质量的 AI 知识交流平台,方便大家一起交流和学习,同时提高对 …

调整Hive查询临时内存大小的方法

文章目录 前言设置Hive查询的临时内存大小1、Hive 执行引擎内存参数2. Tez 引擎内存参数3. MapReduce 引擎内存参数 查询默认内存大小 总结 前言 在Hive中,调整临时内存大小是优化查询性能的关键一步。通过合理配置相关参数,可以使查询在处理大数据集时…

我的年度总结(大一程序员的自述)

呀哈喽,我是结衣。 我也来参加这个年度总结的话题咯,喜欢的话可以点个赞哦。 作为一个大一新生,我从1级的编程小白到了现在的2级编程小白。在7月份之前我可以说是完全不了解编程的一位新人,对应电脑的了解也就只会打游戏看电视和浏…

外贸企业为何要选择Yandex推广?

Yandex作为俄罗斯最大的搜索引擎,对于外贸企业的推广具有不可忽视的重要意义。随着全球市场的不断扩大和互联网的普及,越来越多的外贸企业开始将目光投向俄罗斯市场。而Yandex作为俄罗斯本土的搜索引擎巨头,拥有庞大的用户群体和广泛的市场覆…

Qt QCheckBox复选按钮控件

文章目录 1 属性和方法1.1 文本1.2 三态1.3 自动排他1.4 信号和槽 2 实例2.1 布局2.2 代码实现 Qt中的复选按钮类是QCheckBox它和单选按钮很相似,单选按钮常用在“多选一”的场景,而复选按钮常用在"多选多"的场景比如喜欢的水果选项中&#xf…

暴雨信息发布算力网络应用平台打造零感知算网服务新模式

为进一步优化算力网络应用服务能力和降低算力网络使用难度,暴雨信息突破基于算力网络的实例跨域协同与迁移、基于测试评估的应用度量和解构等技术,研发并推出算力网络应用平台。该系统通过提供一种即开即用、按需付费的零感知算网应用服务,使…

关于Redis的事务

关于Redis事务的学习,查了一些资料留存链接 腾讯二面:Redis 事务支持 ACID 么? Redis事务 高级Java程序员必问,Redis事务终极篇

【满分】【华为OD机试真题2023CD卷 JAVAJS】攀登者2

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 攀登者2 知识点数组 时间限制:1s 空间限制:32MB 限定语言:不限 题目描述: 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的高度代表相对海拔高度。其中数…

13年老鸟整理,自动化测试落地实施方案总结,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 一般来说&#xf…

RK平台计算GPIO对应的整型数

GPIO是比较常用的资源,比如说控制LED灯亮灭,控制LCD上电,控制模块的复位电路,做外设的中断脚等等,这些都有对GPIO的操作和使用,所以说,GPIO开发是驱动开发中必不可少的操作,而且也是…

如何轻松拿捏LIO-SAM?

LOAM是目前为止激光里程计(LO)领域最经典最广泛使用的方法,堪称LO领域的baseline,至今仍在KITTI数据集上名列前茅。但是它存在诸多问题,比如:它直接存储全局体素地图而不是局部地图,从而很难执行回环检测以修正漂移&am…

任务管理器的 top

文章目录 任务管理器的 top常规使用显示完整命令设置信息更新次数设置信息更新时间显示指定的进程信息指定用户的进程信息更多信息 任务管理器的 top top命令比较像Windows里面的任务管理器,提供一个动态实时的系统状态检测,可以检测实时显示内存、CPU、…

性能测试很简单-JMeter性能测试实践

最近破费买了一台服务器,准备搭建自己的网站,顺便将自己开发的一些测试小工具部署到服务器上,虽然机器配置一般,还是决定对服务器进行压测一番,看一下服务器性能如何。本次压测选择的工具是JMeter,这个工具…

Linux: 设置qmake的Qt版本

1、修改默认的qtchooser/default.conf // cct-app4:/usr/lib/x86_64-linux-gnu/qt-default/qtchooser % cat default.conf /usr/lib/x86_64-linux-gnu/qt4/bin /usr/lib/x86_64-linux-gnu // cct-app4:/usr/lib/x86_64-linux-gnu/qt-default/qtchooser 修改成对应的版本即可…