js 数组和对象的复制

js数组复制可以利用数组的合并方法concat()会返回一个新数组的特征 来实现复制

例如 var a=[1,2,3]; var b= a.concat();

利用 slice()也可以, 返回的也是一个新数组。

对象的深度复制可以采用自定义回调函数实现

function clone(myObj){
  if(typeof(myObj) != ‘object‘) return myObj;
  if(myObj == null) return myObj;
  var myNewObj = new Object();
  for(var i in myObj){
    myNewObj[i] = clone(myObj[i]);
  }
  return myNewObj;
}

这种写法在复制中会存在问题:

var a=[1,2,3];

a.b = {c:‘d‘};

a中既有数组,也有对象。 使用a.concat() 只能复制其中的数组。

使用 自定义函数clone() 就会把当中的数组 也变成 对象。

应该避免这种情况发生,JSON.stringify() 也只会转换当中的数组部分

================

a.constructor == Array 判断对象是否是数组

但如果有数组 也有对象的话,例如上面的a 也会返回true

时间: 2024-10-17 16:55:00

js 数组和对象的复制的相关文章

js数组的拷贝赋值复制二三事总结

今天在看React-native性能优化的时候,看到如何避免shouldComponentUpdate的异常数据时,脑内一阵风暴,从而牵连出一连串的问题,于是有了这一篇关于js数组的复制(深浅拷贝)与赋值等为何能产生异常数据的文章. 有什么问题欢迎指正 现在进入正题: 首先异常数据的产生在于我们在复制赋值时,会有或没有改变到本身的值. 一.push与concat push的定义是:像数组末尾添加一个或更多元素,并返回新的长度.该方法会改变数组的长度. concat的定义是:连接两个或更多的数组,

数组和对象的复制

1.数组的复制 a)利用数组的concat()方法 var a=[1,2,3];var b=a.concat();console.log(b);//[1,2,3] a[3]=5;console.log(a);//[1,2,3,5]console.log(b);//[1,2,3] b)利用数组的slice()方法 var a=[1,2,3]var b=a.slice(0); console.log(b);//[1,2,3] a[3]=5;console.log(a);//[1,2,3,5]cons

js 数组、对象转json 以及json转 数组、对象

1.JS对象转JSON 方式:JSON.stringify(obj) var json = {"name":"iphone","price":666}; //创建对象: var jsonStr = JSON.stringify(json); //转为JSON字符串 console.log(jsonStr); 2.JS数组转JSON //数组转json串 var arr = [1,2,3, { a : 1 } ]; JSON.stringify(

JS数组与对象的遍历方法大全

本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() underscore的_.each() 文中的范例基于以下数组和对象. ? 1 2 3 4 5 6 7 8 var arrTmp = ["value1","value2","value3"]; var objTmp = {     aa:"

原创-整理了下常用的js数组 、对象、数字、字符串的操作方法

终于整理好了...主要是一些常用的函数,包含es6和es5的所有常用的,吧一些不常用的全部砍掉,省的大家看的费事.发现这个到博客上面有点乱.给个百度云地址:https://pan.baidu.com/s/1MwMdW5P8IOoyGRYUQ2dBtQ 直接下就可以 字符串方法 : es6 include 返回布尔值,表示是否找到了参数字符串. 第二个参数表示开始搜索位置 startsWith 返回布尔值,表示参数字符串是否在原字符串的头部. 第二个参数表示开始搜索位置 endsWith 返回布尔

js 数组与对象的区别

学习javascript的时候,我曾经一度搞不清楚”数组”(array)和”对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合. 比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢? 我后来才知道,数组表示有序数据的集合,而对象表示无序数据的集合.如果数据的顺序很重要,就用数组,否则就用对象. 当然,

js 数组转对象 对象转数组

数组转对象 对象转数组 原文地址:https://www.cnblogs.com/xy1996/p/11826740.html

js中js数组、对象与json之间的转换

在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }';JSON对象:var str2 = { "name": "cxh", "sex": "man"

js数组和对象

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <style> </style> <body> </body> <script> //定义数组 var data = ['武汉','瑞昌','宜春'];