面试专题一:js的数组

news/2024/11/14 13:39:35/

前言

想做最全的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.ppmy.cn/news/1298936.html

相关文章

了解虾皮平台的免费采集软件:数据抓取、分析与市场优势

在电商领域,市场分析和选品策略制定是卖家们取得成功的关键。虾皮(Shopee)平台提供了免费采集软件,帮助卖家从平台上抓取商品数据,以便进行市场分析、选品策略制定等。这类软件具备数据抓取、数据分析、批量处理、实时…

PCA主成分分析算法

在数据分析中,如果特征太多,或者特征之间的相关性太高,通常可以用PCA来进行降维。比如通过对原有10个特征的线性组合, 我们找出3个主成分,就足以解释绝大多数的方差,该算法在高维数据集中被广泛应用。 算法&#xff08…

JavaScript:正则表达式

1 正则表达式1: // - 用户名、密码、电子邮件... - 正则表达式用来描述一个关于字符串的规则 程序可以根据这个规则来识别一个字符串是否符合要求 或者从一个字符串中提取出符合要求的内容 // 创建一个正则表达式// 通过构造函数来创建一个正则的对象// 语法: …

HNU-数据库系统-作业

数据库系统-作业 计科210X 甘晴void 202108010XXX 第一章作业 10.09 1.(名词解释)试述数据、数据库、数据库管理系统、数据库系统的概念。 数据,是描述事物的符号记录。 数据库(DB),是长期存储在计算机内、有组织、可共享的大量…

pytorch导出onnx时遇到不支持的算子怎么解决

在使用pytorch模型训练完成之后,我们现在使用的比较多的一种方法是将pytorch模型转成onnx格式的模型中间文件,然后再根据使用的硬件来生成具体硬件使用的深度学习模型,比如TensorRT。 在从pytorch模型转为onnx时,我们可能会遇到部…

12.1SPI驱动框架

SPI硬件基础 总线拓扑结构 引脚含义 DO(MOSI):Master Output, Slave Input, SPI主控用来发出数据,SPI从设备用来接收数据 DI(MISO) :Master Input, Slave Output, SPI主控用来发出数据,SPI从设备用来接收…

基于JavaWeb+BS架构+SpringBoot+Vue校园一卡通系统的设计和实现

基于JavaWebBS架构SpringBootVue校园一卡通系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第一章 概述 4 1.1 研究背景 4 1.2研究目的及意义 4 1.3国内外发展现状 4 1…

记录尝试投向不同的岗位——信息化专员——感想

1.保持随时响应的铃声 因为手机开启了远离手机的模式,然后会自动的把手机开启勿扰模式,导致对方打电话过来两次手机都没有响铃,本来就与岗位的匹配度低,然后没接到电话,这样连约面试的机会都没有。 人事提问 1.做过o…