
正文
js函数实现数组复制,js数组复制但是不改变原数组
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
JS中实现深拷贝的几种方法(object,Array)
可以看到改变targetCopy并没有改变原始的target,继承的属性也没有丢失,因此实现了基本的深拷贝。 但是用JSON.parse()和JSON.stringify()会有一个问题。
有效的对象拷贝应该是指深拷贝。浅拷贝 : 就是两个js 对象指向同一块内存地址,所以当obj1 ,obj2指向obj3的时候,一旦其中一个改变,其他的便会改变!深拷贝:就是重新复制一块内存,这样就不会互相影响。
首先我们要实现一个getType函数对元素进行类型判断,关于元素的类型判断,可以参考我另一篇博文 js中typeof和instanceof详解 ,这里用一个更简便的方法,直接调用Object.prototype.toString 方法。
使用递归的方式实现深拷贝 此外,通过jQuery的extend方法实现深拷贝,lodash.cloneDeep()实现深拷贝。
不可变元素),对象里的可变元素作为深层次的数据结构并没有被拷贝到新地址里面去。而是和原对象里的可变元素指向同一个地址,所以在新对象或原对象里对这个可变元素做修改时,两个对象是同时改变的,但是深拷贝不会这样,这个是浅拷贝相对于深拷贝最根本的区别。
相关问答
Q1: 深拷贝的三种实现方式
1、第一种方法:使用=号浅拷贝 输出结果:第二种方法:使用copy浅拷贝 输出结果:第三种方法:使用deepcopy深拷贝 输出结果:从上述示例可以看出:=浅拷贝:值相等,地址相等 copy浅拷贝:值相等,地址不相等 deepcopy深拷贝:值相等,地址不相等 总结:1,深浅拷贝都是对源对象的复制,占用不同的内存空间。
2、新对象跟原对象不共享内存,修改新对象不会改到原对象。
3、JSON.parse()和JSON.stringify()上面的jQuery源码是否让你眼花缭乱?有没有什么办法无脑实现深拷贝呢?JSON.parse()和JSON.stringify()给了我们一个基本的解决办法。可以看到改变targetCopy并没有改变原始的target,继承的属性也没有丢失,因此实现了基本的深拷贝。
Q2: js利用回调函数把一个数组的各个数乘以2再分别加1,得到别一个数组?
1、首先是 Array.prototype.map 方法,这是ES5给出的数组实例的方法。给map传入一个回调函数,map就会遍历数组,将相关信息一起传入回调函数,并取回这个回调函数的返回值作为新数组的对应索引的元素,并返回这个新数组。
2、reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。先看第一个例子:这里可以看出,上面的例子index是从1开始的,第一次的prev的值是数组的第一个值。
3、可以使用一个for循环实现两个数组元素相加,并将结果存储到一个新的数组中。
Q3: JS数组方法
1、先新建一个html文件,命名为test.html。在test.html文件内,使用div标签创建一个模块,并设置其id为outinput,主要用于下面通过该id获得div对象。在js标签内,定义一个数组arr,数组内定义三个元素,分别为“测试一”,“测试二”,“测试三”。
2、js的indexOf()方法 var arr_data = [1,2,3];arr_data.indexOf(1); //如果存在返回值的下标,不存在返回-1 jquery的$.inArray()方法 .inArray(1, arr_data); //如果存在返回值的下标,不存在返回-1 arr.find()数组实例的find()用于找出第一个符合条件的数组元素。
3、match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,并返回一个包含该搜索结果的数组。注意事项 :如果 match 方法没有找到匹配,将返回 null 。
4、es6有了Set,可以通过成员唯一性去重 使用数组对象的lastIndexOf()方法。(关于lastIndexOf():( https:// )定义新数组,存入原数组第一个元素,再将原数组元素和新数组元素比较,不同的继续push到新数组。splice()方法从数组中添加/删除重复值。
5、结论: 如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。
6、vararr=newArray();有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定义你需要的任意多的变量一样)。
Q4: js获取数组里的内容
首先,打开html编辑器,新建html文件,例如:index.html,编写问题基础代码。在index.html中的标签,输入js代码:$(body).append($(#shuz).val());。浏览器运行index.html页面,此时shuz数组中的值被成功用js取出打印了出来。
后台输出的是[object Object],看不到具体的内容,此时只需在前端页面上利用JSON.stringify()将该传输数据转换成与json文件中格式一致就可以解决问题。代码如下://JSON.stringify()JSON.stringify(date) //data注:JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串。
如果知道数组下标,直接 arr[index]方式获取 假设不知道数组下标,查找某一项值,例如: 数组 arr = [red, green, yellow, green, blue];查找 green:var myFirstIndex = Array.indexOf(arr, green); // 返回1 indexOf查找指定项的索引位置。
js获取数组中的一部分元素,有2种方法:slice和filter函数,下面分别介绍。sliceslice的定义和用法如下,用于截取数组的一段 执行 var arr = [1,2,3,4,5];arr.slice(1,4);这2行代码,可以看到截取了1到4下标的代码 filterfilter则用于过滤数组中的一部分元素,剩下的元素就是需要的那部分元素。
Q5: 如何用js取数组内的值?
1、后台输出的是[object Object],看不到具体的内容,此时只需在前端页面上利用JSON.stringify()将该传输数据转换成与json文件中格式一致就可以解决问题。代码如下://JSON.stringify()JSON.stringify(date) //data注:JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串。
2、首先,打开html编辑器,新建html文件,例如:index.html,编写问题基础代码。在index.html中的标签,输入js代码:$(body).append($(#shuz).val());。浏览器运行index.html页面,此时shuz数组中的值被成功用js取出打印了出来。
3、如果知道数组下标,直接 arr[index]方式获取 假设不知道数组下标,查找某一项值,例如: 数组 arr = [red, green, yellow, green, blue];查找 green:var myFirstIndex = Array.indexOf(arr, green); // 返回1 indexOf查找指定项的索引位置。
4、先用typeof判断类型,然后parseFloat转换,判断结构是否NaN。
js函数实现数组复制的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于js数组复制但是不改变原数组、js函数实现数组复制的信息别忘了在本站进行查找喔。







