map()为操作数组的一种方法,官方文档显示:

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

  2. map() 方法按照原始数组元素顺序依次处理元素。

  3. 注意: map() 不会对空数组进行检测。

  4. 注意: map() 不会改变原始数组。

但是我在实践中却发现事实并非如此。

当数组为基础类型时原数组不变:

    let array=[1,2,3,4,5]let newArray=array.map((item) => item*2)console.log(array); // [1,2,3,4,5]console.log(newArray);//[2, 4, 6, 8, 10]

当数组为引用类型时原数组发生改变:

    let array = [{ name: 'Anna', age: 16 }, { name: 'James', age: 18 }]let newArray=array.map((item) => {item.like='eat';return item;})console.log(array); // [{ name: 'Anna', age: 16,like: "eat"},{ name: 'James', age: 18,like: "eat"}]console.log(newArray);//[{ name: 'Anna', age: 16,like: "eat"},{ name: 'James', age: 18,like: "eat"}]

避免原数组发生改变:

    let array = [{ name: 'Anna', age: 16 }, { name: 'James', age: 18 }]let newArray=array.map((item) => {const obj = { ...item, like:'eat'};return obj;})console.log(array); // [{ name: 'Anna', age: 16},{ name: 'James', age: 18}]console.log(newArray);//[{ name: 'Anna', age: 16,like: "eat"},{ name: 'James', age: 18,like: "eat"}]

JS的map()方法会改变原始数组吗?相关推荐

  1. JS Array.map方法内异步方法无法同步执行

    问题: JS Array.map方法内异步方法无法同步执行 场景: 我们在使用map来设置每一项值的时候,涉及到异步操作,就会出现问题. 按照常规,重现出一种情形. 假设我要使用map对每一项值进行操 ...

  2. 数组中map遍历会改变原数组吗?

    提到map用法,很多人想到forEach,那么这两种方法的区别是什么?会有人说,forEach会改变原数组:map不会改变原数组,返回一个新数组.事实是这样的吗?答案不是,这种说法不准确,是有条件的. ...

  3. 重写数组的方法(改变原数组)

    下图是我自我学习模拟数组时总结的一些重新数组的方法: 本文我们暂不讨论不改变原数组的方法,只谈改变原数组用到的 6 种方法. 改变原数组的方法 push() 按参数顺序向数组尾部添加元素,返回新数组的 ...

  4. map遍历是否改变原数组

    遇到问题:将后端返回的数字(数字代表不同含义),展示在前端页面,用map的方法遍历将item值重新赋值,只展示的话是没有任何问题的:然后又需要将这个值以数字的形式返回给后端,这个时候就导致值已经变成了 ...

  5. 用原生js实现map方法

    我们平时用的是已经封装好的map方法,如果让我们自己封装一个map,应该如何实现. 万变不离其宗,其实遍历数组的核心还是for循环.因此下面封装一个map方法. 思路: 1.在原型上添加一个方法 2. ...

  6. js操作改变原数组的解决方法

    最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...

  7. js改变原数组的方法和不改变原数组

    一.改变原始数组的方法: 1.pop() pop() 方法移除数组的最后一个元素,并返回该元素. 注意:pop() 方法会改变数组的长度. pop() 返回它删除的元素: let teams = [& ...

  8. JS中find(), findIndex(), filter(), forEach(), some(), every(), map()方法

    1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...

  9. Vue.js中splice()方法实现对数组进行删除的操作

    语法结构:splice(index,len,[item]) 1.可以用来添加/删除/替换数组内某一个或者几个值 2.该方法会改变原始数组 index:数组开始下标 len: 替换/删除的长度 item ...

最新文章

  1. vue2.0实现底部导航切换效果
  2. OpenGL学习笔记以及其它学习思考
  3. 区块链学堂(1):区块链引子
  4. 网页设计/移动开发学习资源推荐
  5. curl上传文件linux,在Linux中如何使用curl从一个服务器流式传输文件到另一个服务器(有限的服务器资源)...
  6. Linux基础-目录与路径
  7. 3分钟搞懂前后端开发的区别
  8. java引用 弱引用_了解Java弱引用
  9. 如何使用Spring优雅地处理REST异常
  10. Kotlin学习笔记18 反射Part2
  11. (30)Verilog HDL系统函数:$stop
  12. ios沙盒查找图片展示
  13. PHP毕业设计——许愿墙(有源码)
  14. 过滤器和拦截器的区别
  15. CruiseControl入门简介
  16. java中如何获取一个字符串的长度呢?
  17. mingw不能安装_C语言/C++初学——Visual Studio环境的安装配置与使用
  18. 202101汇率换算
  19. 你好Haskell (1) 环境搭建和简单玩玩
  20. 容器 I/O 性能诊断:到底哪个应用是带宽杀手?

热门文章

  1. 有道云APP(生成文档目录)
  2. TiDB 在 58 集团的应用与实践
  3. 百度贴吧五年内流失九成用户;罗永浩吐槽苹果新品:更丑更贵更胡来;进互联网大厂毕业生5年后7成人离开 | EA周报...
  4. 二战中真实的打酱油船
  5. 小白也能轻松上手的Prometheus教程
  6. UML类图示例一张:公司结构
  7. TM1637 MSP430 单片机 数码管 程序 驱动 G2553
  8. 在观察研究中减少数据偏倚:倾向评分(一)
  9. iOS8.0 使用Photos.framework对相册的常用操作
  10. 软碟通系统U盘制作教程