面试专题一:js的数组

这篇具有很好参考价值的文章主要介绍了面试专题一: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] = 999
    console.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, 5
	console.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遍历数组,后面有机会会单出一篇这两个的对比。

数组去重

let arr = [1, 2, 4, 4, 5, 5, 8, 0]
let arr1 = [] // 哈希
let arr2 = [] // filter
let arr3 = [] // set
let arr4 = [] // includes
// 暴力删除法

// 1.哈希
let map = new Map()
for(let i in arr) {
    if(!map.has(arr[i])) {
        arr1.push(arr[i])
    }
    map.set(arr[i], i)
}

// 2.filter + indexOf
arr2 = arr.filter((item, index)=> {
    // 如果只出现一次,其位置为第一次索引值
    return arr.indexOf(item) == index
})

// 3.set
arr3 = Array.from(new Set(arr))
// [...new Set(arr)]

// 4.includes
arr.forEach(item => {
    if(!arr4.includes(item)) {
        arr4.push(item)
    }
})

// 5.暴力拆解法
for(let i = 0; i < arr.length; i++) {
    for(let j = i + 1; j < arr.length; j++) {
        if(arr[i] == arr[j]) {
            arr.splice(j, 1)
        }
    }
}

总结

判断是否是数组的方法:

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

修改数组的方法

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

查找数组元素

indexOf、lastIndexOf、includes

遍历数组的方法

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

后面还会出更多专题,欢迎关注~文章来源地址https://www.toymoban.com/news/detail-792358.html

到了这里,关于面试专题一:js的数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端面试专题】【5】Vue3

    性能更好(后面详细讲) 体积更小 更好的 ts 支持 更好的代码组织 更好的逻辑抽离 更多新功能 Option API beforeDestroy 改为 beforeUnmount destroyed 改为 unmounted 其他沿用 Vue2 的生命周期 Composition API Composition API 带来了什么 更好的代码组织 更好的逻辑复用 更好的类型推导 如何选择

    2023年04月09日
    浏览(34)
  • leetcode — JavaScript专题(五):计数器 II、只允许一次函数调用、 创建 Hello World 函数、将对象数组转换为矩阵、节流、分块数组

    专栏声明:只求用最简单的,容易理解的方法通过,不求优化,不喜勿喷 题面 请你写一个函数 createCounter. 这个函数接收一个初始的整数值 init 并返回一个包含三个函数的对象。 这三个函数是: increment() 将当前值加 1 并返回。 decrement() 将当前值减 1 并返回。 reset() 将当前值

    2024年02月03日
    浏览(48)
  • 【JS】js数组分组,javascript实现数组的按属性分组

    项目代码中有很多时候需要按一定的条件实现按属性分组 你可以使用JavaScript的 Array.prototype.reduce() 方法来将数组分组。这是一种高级的方法,它可以将数组元素组合成一个单值。在这种情况下,你可以使用它来把数组元素放到一个对象中,其中对象的键是分组的条件,值是所

    2023年04月08日
    浏览(50)
  • 【JavaScript】面试手写题精讲之数组(中)

    续借上文,这篇文章主要讲的是 数组原型链 相关的考题,有些人可能会纳闷,数组和原型链之间有什么关系呢?我们日常使用的数组 forEach , map 等都是建立在原型链之上的。举个🌰,如我有一个数组 const arr = [1,2,3] 我想要调用 arr.sum 方法对 arr 数组的值进行求和,该如何做

    2024年02月21日
    浏览(39)
  • 【JavaScript】面试手写题精讲之数组(下)

    这章主要讲的是数组的排序篇,我们知道面试的时候,数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题,大概可以分为如下 冒泡排 – 稳定排序 插入排序 – 稳定排序 选择排序 – 不稳定排序 快速排序 – 不稳定

    2024年02月19日
    浏览(39)
  • JavaScript:js数组/对象遍历方法

    一、js遍历方法 序号 方法 描述 1 for 使用最基本的for循环可以遍历数组 2 for of for...of语句用来遍历可迭代对象(包括数组、Set、Map、字符串等),它可以替代传统的for循环和forEach()方法。for...of循环每次迭代都将返回一个值,而不是索引。 3 for in for...in语句用来遍历对象的可

    2024年02月09日
    浏览(56)
  • 前端Javascript | 数组值随机选择函数

    为了解决 postman 传参数据定制化,需要写一点前置脚本,有用到随机选取数组中的值来造数据。

    2024年02月07日
    浏览(49)
  • 【javascript】js获取数组中数值最大的数

    一、借助apply()的参数,获得最大值 由于max()里面参数不能为数组,所以借助apply(funtion,args)方法调用Math.max(),function为要调用的方法,args是数组对象,当function为null时,默认为上文,即相当于apply(Math.max,arr) 二、借助call()的参数,获得最大值 call()与apply()类似,区别是传入参数

    2024年02月11日
    浏览(41)
  • 前端面试题---->JavaScript

    原因: 当使用const声明一个对象或数组时,实际上是保证了对象或数组的引用不会被修改,但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变,但并不保证内存地址指向的内容不变,而基本类型的变量在内存中存储的是值本身,而不

    2024年03月27日
    浏览(54)
  • 前端面试问题-JavaScript

    1 闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另⼀个函数作⽤域中变量的函数,创建闭包的最常⻅的⽅式就是在⼀个函数内创建另⼀个函数,通过另⼀个函数访问这个函数的局部变量,利⽤闭包可以突破作⽤链域 闭包的特性: 函数内再嵌套函数 内部函

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包