当前位置: 首页 > wzjs >正文

网站 硬件方案php图书管理系统网站开发

网站 硬件方案,php图书管理系统网站开发,黄石网站建设价格,昆明云南微网站制作哪家好JavaScript 数组操作指南:哪些方法会改变原数组?哪些不会?(面试必备详解) 在 JavaScript 开发中,数组操作是最常用的功能之一。区分哪些方法会改变原数组(mutating methods)&#x…

JavaScript 数组操作指南:哪些方法会改变原数组?哪些不会?(面试必备详解)

在 JavaScript 开发中,数组操作是最常用的功能之一。区分哪些方法会改变原数组(mutating methods),哪些不会(non-mutating methods) 是面试高频考点,也是避免实际开发中产生 BUG 的关键。本文将深度解析这两类方法,并附详细代码示例。


一、会改变原数组的方法(Mutating Methods)

这些方法直接修改原始数组,使用时需特别谨慎。

  1. push()
    在数组末尾添加元素,返回 新长度

    let arr = [1, 2, 3];
    arr.push(4); // 返回长度 4
    console.log(arr); // [1, 2, 3, 4] ✅ 原数组改变
    
  2. pop()
    删除数组最后一个元素,返回 被删除的元素

    let arr = [1, 2, 3];
    arr.pop(); // 返回 3
    console.log(arr); // [1, 2] ✅ 原数组改变
    
  3. shift()
    删除数组第一个元素,返回 被删除的元素

    let arr = [1, 2, 3];
    arr.shift(); // 返回 1
    console.log(arr); // [2, 3] ✅ 原数组改变
    
  4. unshift()
    在数组开头添加元素,返回 新长度

    let arr = [1, 2, 3];
    arr.unshift(0); // 返回长度 4
    console.log(arr); // [0, 1, 2, 3] ✅ 原数组改变
    
  5. splice()
    添加/删除任意位置元素,返回 被删除元素的数组

    let arr = [1, 2, 3, 4];
    arr.splice(1, 2, 'a', 'b'); // 从索引1开始删除2个元素,添加'a'、'b'
    console.log(arr); // [1, 'a', 'b', 4] ✅ 原数组改变
    
  6. sort()
    排序数组(默认按 Unicode 排序),返回 排序后的原数组

    let arr = [3, 1, 2];
    arr.sort(); // 返回 [1, 2, 3]
    console.log(arr); // [1, 2, 3] ✅ 原数组改变
    
  7. reverse()
    反转数组顺序,返回 反转后的原数组

    let arr = [1, 2, 3];
    arr.reverse(); // 返回 [3, 2, 1]
    console.log(arr); // [3, 2, 1] ✅ 原数组改变
    
  8. fill()
    填充数组(指定范围),返回 填充后的原数组

    let arr = [1, 2, 3];
    arr.fill(0, 1, 3); // 从索引1到3填充0
    console.log(arr); // [1, 0, 0] ✅ 原数组改变
    
  9. copyWithin()
    复制数组内元素到指定位置,返回 修改后的原数组

    let arr = [1, 2, 3, 4];
    arr.copyWithin(0, 2, 4); // 将索引2-4的元素复制到索引0
    console.log(arr); // [3, 4, 3, 4] ✅ 原数组改变
    

二、不会改变原数组的方法(Non-Mutating Methods)

这些方法返回新数组或新值,原始数组保持不变。

  1. concat()
    合并数组,返回 新数组

    let arr = [1, 2];
    let newArr = arr.concat([3, 4]);
    console.log(arr);    // [1, 2] ❌ 原数组不变
    console.log(newArr); // [1, 2, 3, 4]
    
  2. slice()
    截取数组片段,返回 新数组

    let arr = [1, 2, 3, 4];
    let subArr = arr.slice(1, 3); // 截取索引1-2
    console.log(arr);    // [1, 2, 3, 4] ❌ 原数组不变
    console.log(subArr); // [2, 3]
    
  3. join()
    数组转字符串,返回 字符串

    let arr = [1, 2, 3];
    let str = arr.join('-');
    console.log(arr); // [1, 2, 3] ❌ 原数组不变
    console.log(str); // "1-2-3"
    
  4. map()
    映射新数组,返回 新数组

    let arr = [1, 2, 3];
    let doubled = arr.map(x => x * 2);
    console.log(arr);    // [1, 2, 3] ❌ 原数组不变
    console.log(doubled); // [2, 4, 6]
    
  5. filter()
    过滤元素,返回 新数组

    let arr = [1, 2, 3, 4];
    let evens = arr.filter(x => x % 2 === 0);
    console.log(arr);   // [1, 2, 3, 4] ❌ 原数组不变
    console.log(evens); // [2, 4]
    
  6. reduce() / reduceRight()
    累积计算,返回 累积结果

    let arr = [1, 2, 3];
    let sum = arr.reduce((acc, cur) => acc + cur, 0);
    console.log(arr); // [1, 2, 3] ❌ 原数组不变
    console.log(sum); // 6
    
  7. find() / findIndex()
    查找元素/索引,返回 元素值或索引

    let arr = [5, 12, 8];
    let found = arr.find(x => x > 10); // 12
    console.log(arr); // [5, 12, 8] ❌ 原数组不变
    
  8. every() / some()
    逻辑判断,返回 布尔值

    let arr = [1, 2, 3];
    let allPositive = arr.every(x => x > 0); // true
    console.log(arr); // [1, 2, 3] ❌ 原数组不变
    
  9. flat() / flatMap()
    扁平化数组,返回 新数组

    let arr = [1, [2, 3]];
    let flatArr = arr.flat();
    console.log(arr);     // [1, [2, 3]] ❌ 原数组不变
    console.log(flatArr); // [1, 2, 3]
    

三、面试高频问题与陷阱解析
  1. 问题: sort()reverse() 的返回值是什么?
    答案: 它们返回修改后的原数组(不是新数组),支持链式调用(但不推荐)。

  2. 陷阱: 嵌套对象的修改
    即使使用 map()filter() 等非变异方法,若直接修改元素内的对象属性,仍会影响原数组

    let users = [{ name: 'Alice' }, { name: 'Bob' }];
    let newUsers = users.map(user => {user.name = user.name.toUpperCase(); // ❌ 错误!修改了原对象return user;
    });
    console.log(users[0].name); // 'ALICE'(原数组被污染)
    

    正确做法:

    let newUsers = users.map(user => ({...user, // 创建新对象name: user.name.toUpperCase()
    }));
    
  3. 问题: 如何在 React/Vue 中安全更新数组状态?
    答案: 使用非变异方法或创建副本:

    // React 示例:添加元素
    setList(prev => [...prev, newItem]);// Vue 示例:删除元素
    this.list = this.list.filter(item => item.id !== id);
    
  4. 问题: 如何快速判断一个方法是否改变原数组?
    技巧:

    • 返回数组长度、元素或 undefined 的方法通常改变原数组(如 push, pop)。
    • 返回新数组的方法不改变原数组(如 map, filter)。

四、总结与最佳实践
类型方法
改变原数组push, pop, shift, unshift, splice, sort, reverse, fill, copyWithin
不改变原数组concat, slice, map, filter, reduce, find, every, flat, join

最佳实践:

  1. 在函数式编程中优先使用非变异方法。
  2. 修改数组前用 [...arr]arr.slice() 创建副本。
  3. 在框架中更新状态时,永远不要直接修改原数组

掌握这些细节不仅能轻松应对面试,更能写出健壮可靠的代码。建议收藏本文并动手练习示例代码!


文章转载自:

http://36Xx7st5.cnxpm.cn
http://LaJWQYRz.cnxpm.cn
http://ZJBctwkS.cnxpm.cn
http://FciEd4Xe.cnxpm.cn
http://woGMRiSY.cnxpm.cn
http://Q9xXsHXe.cnxpm.cn
http://vVuXcirh.cnxpm.cn
http://tvqtCrvp.cnxpm.cn
http://RroM9aRs.cnxpm.cn
http://k2cf60WD.cnxpm.cn
http://CAUGTu5T.cnxpm.cn
http://4kK1olQb.cnxpm.cn
http://dJg1akfz.cnxpm.cn
http://Rk7hw5Za.cnxpm.cn
http://YFTUp4FT.cnxpm.cn
http://APmucCih.cnxpm.cn
http://J6kTPPrW.cnxpm.cn
http://09r2YOmV.cnxpm.cn
http://m7Vorsfv.cnxpm.cn
http://Qpq0Fzi4.cnxpm.cn
http://JKyEiLuI.cnxpm.cn
http://PuTI2nMx.cnxpm.cn
http://qToaTbRF.cnxpm.cn
http://dXO5ybDg.cnxpm.cn
http://04cpIUGx.cnxpm.cn
http://gx9hxKlO.cnxpm.cn
http://V5Tj8PYI.cnxpm.cn
http://rskESonp.cnxpm.cn
http://Aj7Vut9Q.cnxpm.cn
http://3jkDkJVq.cnxpm.cn
http://www.dtcms.com/wzjs/614944.html

相关文章:

  • 搜索栏搜索网站?热?文随州网站建站
  • 个人网站可以做产品众筹吗wordpress首页模板编辑
  • 承德建设企业网站事业单位网站建设注销情况说明
  • 苏州做商城网站设计中信建设证券官方网站
  • 沈阳网站外包大型网站故障
  • 建设银行网站注册用户名建立个人网站主题
  • 爱看视频的网站新圩做网站公司
  • 电商网站建设常见问题烟台建设公司网站
  • 武进网站建设信息网站空间 流量
  • 网站自动生成网页上海一网通办官网
  • 怎么制作网站横幅教案做别人一样的网站模板
  • 在百度怎么申请自己的网站兰州门户网站建设
  • 消费全返的 微网站开发网络营销与推广方案
  • 个人教程网站搭建一个wordpress网站多钱
  • 哪里有html企业网站模板下载世界十大营销策划公司
  • 成品网站w灬源码1688永久网站wordpress获取主题目录
  • 企业做网站设置哪些模块微信公众平台绑定网站
  • 常熟做网站的公司wordpress admin 密码忘记
  • 网站二维码链接怎么做怎样建设微网站首页
  • 卫辉市住房和城市建设局网站南昌找店面上什么网站
  • 公司网站开发费用vi企业形象设计公司
  • 深圳网站搭建电话网站建设后台系统有哪些
  • dw制作简单网站模板wordpress 加密 插件
  • 网站建设哪家专业四川省的住房和城乡建设厅网站首页
  • 电子商务网站建设的盈利模式广东省建设局官方网站
  • 中国建设银行网站快速查询南昌网站建设公务
  • 有域名了建立免费网站珠海华兴建设工程有限公司网站
  • 门户网站流程图秦皇岛建设局官方网站
  • 东莞专业网站推广多少钱ios 开发
  • 如何制作手机购物网站那个网站适合学生做兼职