位置: IT常识 - 正文

JS数组方法中哪些会改变原数组,哪些不会?(js中数组方法有哪些)

编辑:rootadmin
JS数组方法中哪些会改变原数组,哪些不会? 前言

推荐整理分享JS数组方法中哪些会改变原数组,哪些不会?(js中数组方法有哪些),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js数组方法哪些会改变原数组,js数组方法哪些会改变原数组,js数组entries,js数组常用操作,js数组方法哪些会改变原数组,js数组常用的方法及用法,js数组方法中哪一项最大,js数组方法中哪一项最大,内容如对您有帮助,希望把文章链接给更多的朋友!

作为一名前端开发人员,我们每天都会与数组打交道。JS 也提供了很多操作数组的原生 API 供我们调用。在这些方法里面,有的方法会改变原数组,有些不会改变原数组。别看这一点小小的区别,往往会造成巨大的影响,特别是在算法层面,有可能会造成算法复杂度的飙升。

今天我们就来好好理一理哪些数组方法操作会改变原数组,哪些数组方法不会改变原数组。

1.会改变原数组的方法1.1 push

push 可以说是最常用的数组操作方法了,它也非常好理解,本身就是往数组里面添加元素的意思。

作用:

push 方法往数组里面添加元素,返回数组的长度。

示例代码:

let arr1 = ['小猪课堂', 23];let length1 = arr1.push('张三');console.log(arr1); // ['小猪课堂', 23, '张三']console.log(length1); // 3

上段代码中 arr1 数组是变化了的,push 方法返回的是数组最新的长度。

1.2 unshift

作用:

unshift 方法会在数组的开头添加一个元素,它会返回数组新的长度。

示例代码:

let arr2 = ['小猪课堂', 23];let length2 = arr2.unshift('张三');console.log(arr2); // ['张三', '小猪课堂', 23]console.log(length2); // 3 1.3 pop

作用:

pop() 方法从数组中删除最后一个元素,并返回该元素的值。

示例代码:

let arr3 = ['小猪课堂', 23];let value1 = arr3.pop();console.log(arr3); // ['小猪课堂']console.log(value1); // 23 1.4 shift

作用:

shift() 方法从数组中删除第一个元素,并返回该元素的值。

示例代码:

let arr4 = ['小猪课堂', 23];let value2 = arr4.shift();console.log(arr4); // [23]console.log(value2); // 小猪课堂 1.5 sort

作用:

sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的。它返回的就是排序后的数组。

示例代码:

let arr5 = [321, 23, 12, 6666, 2];let value3 = arr5.sort();console.log(arr5); // [12, 2, 23, 321, 6666]console.log(value3); // [12, 2, 23, 321, 6666]

注意:

因为 sort 的默认排序是将元素转化为字符串后排序的,所以上述代码中的排序结果可能不是我们想要的,想要获得正确的排序结果,我们可以传入一个函数,来规定排序的规则。

代码如下:

arr5.sort((a, b) => a - b);console.log(arr5); // [2, 12, 23, 321, 6666] 1.6 splice

作用:

splice() 方法用于添加或删除数组中的元素,如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。

示例代码:

let arr6 = ['张三', '小猪课堂', 23];let item1 = arr6.splice(0,1); // 删除一个元素,返回删除元素的数组console.log(item1); // ['张三']console.log(arr6); // ['小猪课堂', 23] 1.7 reverse

作用:

JS数组方法中哪些会改变原数组,哪些不会?(js中数组方法有哪些)

reverse() 方法用于颠倒数组中元素的顺序。

示例代码:

let arr7 = ['张三', '小猪课堂', 23];let item2 = arr7.reverse();console.log(item2); // [23, '小猪课堂', '张三']console.log(arr7); // [23, '小猪课堂', '张三'] 2.不会改变原数组的方法2.1 concat

作用:

concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

示例代码:

let arr8 = ['小猪课堂'];let arr9 = ['张三'];let arr10 = arr8.concat(arr9);console.log(arr8); // ['小猪课堂']console.log(arr9); // ['张三']console.log(arr10); // ['小猪课堂', '张三'] 2.2 join

作用:

join() 方法用于把数组中的所有元素转换一个字符串,元素是通过指定的分隔符进行分隔的。

示例代码:

let arr11 = [1, 2, 3, 4, 5, 6];let item3 = arr1.join(',');console.log(item3); // 小猪课堂,23,张三console.log(arr11); // [1, 2, 3, 4, 5, 6] 2.3 reduce

作用:

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce 方法的使用情况稍微复杂,不熟悉的小伙伴建议去官网好好学学,它的应用范围还是挺宽泛的。

示例代码:

let arr12 = [1, 2, 3, 4, 5, 6];let item4 = arr12.reduce((total,currentValue)=>{return total + currentValue;}, 0);console.log(item4); // 21console.log(arr12); // [1, 2, 3, 4, 5, 6] 2.4 map

作用:

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

示例代码:

let arr13 = [1, 2, 3, 4, 5, 6];let item5 = arr13.map((item) => {return item + 100;});console.log(item5); // [101, 102, 103, 104, 105, 106]console.log(arr13); // [1, 2, 3, 4, 5, 6] 2.5 forEach

作用:

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

示例代码:

let arr14 = [1, 2, 3, 4, 5, 6];let item6 = arr14.forEach((item) => {item + 100;});console.log(item6); // undefinedconsole.log(arr14); // [1, 2, 3, 4, 5, 6]

注意:

forEach 方法没有返回值,而且它也不会改变原数组,有些同学误以为 forEach 会改变原数组,通常是因为在 forEach 方法的回调函数中,我们自己做了更改原数组的操作。

2.6 filter

作用:

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

示例代码:

let arr15 = [1, 2, 3, 4, 5, 6];let item7 = arr15.filter((item) => {return item > 3;});console.log(item7); // [4, 5, 6]console.log(arr15); // [1, 2, 3, 4, 5, 6] 2.7 slice

作用:

slice() 方法可从已有的数组中返回选定的元素。slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

示例代码:

let arr16 = [1, 2, 3, 4, 5, 6];let item8 = arr15.slice(0, 3);console.log(item8); // [1, 2, 3]console.log(arr16); // [1, 2, 3, 4, 5, 6] 2.8 findIndex

作用:

findIndex 接收一个测试函数,也可以叫做条件函数,最终返回满足该测试函数的元素的索引位置,如果没有找到符合条件的元素,则返回-1。如果满足条件的有多个,那么只会返回第一个满足条件的元素索引。

示例代码:

let arr17 = [1, 2, 3, 4, 5, 6];let item9 = arr17.findIndex((item) => {return item > 2;});console.log(item9); // 2console.log(arr17); // [1, 2, 3, 4, 5, 6] 总结

数组方法基本上每一版本的 JS 中都会增加一些,本篇文章主要总结了我们开发中比较常用而且容易混淆的。至于为什么要区分是否更改原数组,那就得根据实际情况来决定了。打个比方,如果有一道算法题,可以用数组方法中的 unshift 和 slice 来解决,那么选用哪一个呢?首先 unshift 会改变原数组,它的事件复杂度是 O(n),而 slice 方法不会改变原数组,它的时间复杂度是 O(1),改用哪个一目了然。

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。

有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文链接地址:https://www.jiuchutong.com/zhishi/300000.html 转载请保留说明!

上一篇:unet模型及代码解析(unet模型代码matlab)

下一篇:参加《2022 中国开发者影响力盛典》我的 4 重收获!

  • 告别2020迎接2021的句子作文开头(告别2020迎接2021的句子)(告别2020迎接2021文案)

    告别2020迎接2021的句子作文开头(告别2020迎接2021的句子)(告别2020迎接2021文案)

  • 小米平板5杜比全景声怎么开启(小米平板5杜比音效设置)

    小米平板5杜比全景声怎么开启(小米平板5杜比音效设置)

  • 苹果11清理运行的软件如何操作(苹果11清理运行内存怎么清理)

    苹果11清理运行的软件如何操作(苹果11清理运行内存怎么清理)

  • 微信记录删除半年了还能恢复吗(微信记录删除半年了能找回吗)

    微信记录删除半年了还能恢复吗(微信记录删除半年了能找回吗)

  • 步步高家教机的家长管理为什么不能登录了(步步高家教机的家长管理密码忘了怎么办)

    步步高家教机的家长管理为什么不能登录了(步步高家教机的家长管理密码忘了怎么办)

  • 抖音视频能发多长时间(抖音视频能发多长的视频)

    抖音视频能发多长时间(抖音视频能发多长的视频)

  • 抖音井号作用(抖音里加井号)

    抖音井号作用(抖音里加井号)

  • u盘拷贝速度慢(U盘拷贝速度慢)

    u盘拷贝速度慢(U盘拷贝速度慢)

  • 华为p40pro看抖音显示不全(华为p40pro看抖音卡顿)

    华为p40pro看抖音显示不全(华为p40pro看抖音卡顿)

  • 华为怎样下载手机铃声(华为手机上怎样下载)

    华为怎样下载手机铃声(华为手机上怎样下载)

  • 退款编号和订单编号一样吗(退款编号和退款单号一样吗)

    退款编号和订单编号一样吗(退款编号和退款单号一样吗)

  • 滴滴出行打不开怎么回事(滴滴出行打不开显示网络异常是什么意思)

    滴滴出行打不开怎么回事(滴滴出行打不开显示网络异常是什么意思)

  • 工程相机怎么用(工程相机app)

    工程相机怎么用(工程相机app)

  • 微信运动什么时候更新(微信运动什么时候刷新)

    微信运动什么时候更新(微信运动什么时候刷新)

  • 华为荣耀30s有没有指纹解锁(华为荣耀30s有没有陀螺仪)

    华为荣耀30s有没有指纹解锁(华为荣耀30s有没有陀螺仪)

  • 手机闪存有什么作用(手机闪存有什么影响)

    手机闪存有什么作用(手机闪存有什么影响)

  • 笔记本关机后鼠标灯还亮是因为什么(笔记本关机后鼠标灯还亮怎么解决)

    笔记本关机后鼠标灯还亮是因为什么(笔记本关机后鼠标灯还亮怎么解决)

  • 一个优酷会员可以登几个手机(一个优酷会员可以登录几台手机)

    一个优酷会员可以登几个手机(一个优酷会员可以登录几台手机)

  • 怎么注销爱奇艺账号(怎么注销爱奇艺手机号绑定)

    怎么注销爱奇艺账号(怎么注销爱奇艺手机号绑定)

  • 充电器发烫是什么原因(充电器发烫是什么会爆炸吗)

    充电器发烫是什么原因(充电器发烫是什么会爆炸吗)

  • 主板cpu供电是8口的可以只插4口吗?(主板CPU供电是8+4但电源CPU供电是8+8怎么办)

    主板cpu供电是8口的可以只插4口吗?(主板CPU供电是8+4但电源CPU供电是8+8怎么办)

  • 华为人脸识别设置几个(华为人脸识别设置一直停留在正在录入)

    华为人脸识别设置几个(华为人脸识别设置一直停留在正在录入)

  • qq等级加速包在哪里看(qq等级加速包怎么看)

    qq等级加速包在哪里看(qq等级加速包怎么看)

  • 中国电信hd什么意思(电信hd啥意思)

    中国电信hd什么意思(电信hd啥意思)

  • 失效文件怎么恢复(失效文件怎么恢复微信)

    失效文件怎么恢复(失效文件怎么恢复微信)

  • 云闪付二维码可以用微信扫吗(云闪付二维码可以收信用卡吗)

    云闪付二维码可以用微信扫吗(云闪付二维码可以收信用卡吗)

  • 华为nova4e是不是浅指纹设计(华为nova4e是不是5G)

    华为nova4e是不是浅指纹设计(华为nova4e是不是5G)

  • 乐视视频如何关闭弹幕(乐视视频怎么关闭)

    乐视视频如何关闭弹幕(乐视视频怎么关闭)

  • qq权限怎么取消(qq权限怎么取消不了)

    qq权限怎么取消(qq权限怎么取消不了)

  • 微信小程序 | 基于ChatGPT实现电影推荐小程序(微信小程序基于什么框架)

    微信小程序 | 基于ChatGPT实现电影推荐小程序(微信小程序基于什么框架)

  • 离职补偿的扣税比例
  • 转出多交增值税和转出未交增值税怎么理解
  • 转让土地使用权营业税税率
  • 补交土地使用税到大厅怎么申报
  • 100%直接控制的母子公司间划转股权或资产
  • 合并后少数股东权益的处理
  • 职工教育经费能结转几年
  • 房产税原值是否包括土地
  • 超范围经营是不是就等于无证经营
  • 以前年度不合规发票怎么处理
  • 税务系统1+1+5
  • 2018年用2015年的发票入账有什么税务的风险?
  • 工伤赔款付医药费怎么会计分录
  • 重置申报清册是什么意思
  • 有限责任公司自然人独资可以增加股东吗
  • 冲销凭证怎么记账
  • 如何计算工程预付款
  • 交通定额发票税率
  • 自制材料入库计划成本
  • 企业一次性支付多年费用 不摊销
  • 预缴地实现的月销售额未超过
  • dwg文件怎么打开
  • 三大期间费用属于什么类
  • 收到银行承兑汇票后,如何取钱
  • 供应商收费标准
  • 上个月做无票收入这个月开票,怎么做分录
  • win10任务栏搜索如何关闭
  • 收到专利补助费的会计处理
  • 员工垫付的钱会计分录
  • opencv详解
  • 沃特金斯格伦州立公园
  • 材料成本差异属于流动资产吗
  • 人工智能lisp
  • ci框架过时了吗
  • autoscle
  • 债券溢折价摊销
  • 购入库存商品会计分录摘要
  • 电子发票怎么清盘操作流程
  • 关闭论坛
  • 无偿提供房屋使用证明有什么后果
  • 借条每月还款怎么写
  • 福利费用属于哪个部门
  • mysql无法添加数据
  • 专票要写开户行和账号
  • 复利和年金的区别通俗易懂的
  • 服务业如何确定收入
  • 其他应付款结转收入的条件
  • 跨年收入如何做账
  • 进项税额不得从销项税额中抵扣项目是什么意思
  • 非流动资产包括哪些会计科目
  • 合并报表的内部投资抵消
  • 红字发票填开说明是?
  • 房地产开发企业销售自行开发的房地产项目
  • 委托加工的成本如何核算
  • Ubuntu15下mysql5.6.25不支持中文的解决办法
  • 分页存储过程包括
  • windows2003r2安装教程
  • ubuntu系统常用命令
  • centos 安装
  • fedora 版本
  • 苹果系统如何访问u盘
  • ubuntu 18.04怎么用
  • win8删除文件不提示
  • win7不识别大于4T的盘
  • win10声音文件
  • g++编译debug
  • win7网速很慢
  • opengl glm库
  • javascript抢票
  • 学习使用grunt来打包JavaScript和CSS程序的教程
  • perl中哈希如何赋值
  • cocos2d怎么用
  • js面向对象的几种方式
  • Python常用时间操作总结【取得当前时间、时间函数、应用等】
  • javascript的理解
  • js基础教程
  • javascript截图找图
  • 出租车开的发票如何查询校验码?
  • 新都税务局咨询电话
  • 国税 地税比例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设