<script>
function copy(a) {
ret = {};
for (sth in a) {
temp = a[sth];
if (temp instanceof Array) {
var ddddd = [];
for (i in temp) {
var b = copy(temp[i]);
ddddd = ddddd.concat(b);
}
ret[sth] = ddddd;
}
else {
ret[sth] = a[sth];
}
}
return ret;
}
console.log
(
copy({name:"马良",age:"31",Books:[{name:"C#入门经典",title:"好书"},
{name:"js入门经典",title:"好书"}]}
)
);
</script>

运行上面的代码,发现copy方法不正确,让我的同事李鑫看了一下,后来经过大家的一番讨论,才发现里面的问题。

js语言不严谨,临时变量得使用,在递归调用时容易混淆,解决问题的方式就是不用临时变量,都用直接变量。

改变后得代码如下

   <script>
function copy(a) {
ret = {};
for (sth in a) {
if (a[sth] instanceof Array) {
ret[sth]=[];
for (i in a[sth]) {
ret[sth].push(copy(a[sth][i]));
}
}
else {
ret[sth] = a[sth];
}
}
return ret;
}
console.log
(
copy({name:"马良",age:"31",Books:[{name:"C#入门经典",title:"好书"},
{name:"js入门经典",title:"好书"}]}
)
);
</script>

可是改了以后,还是不对,谁能帮助我下。给你发个红包没问题的,100以下的都行。

通过一段时间的技术积累,终于把问题解决了,给大家献上代码

    <script>
function copy(a) {
var ret = {};
for (var sth in a) {
var temp = a[sth];
if (temp instanceof Array) {
var ddddd = [];
for (i in temp) {
var b = copy(temp[i]);
ddddd = ddddd.concat(b);
}
ret[sth] = ddddd;
}
else {
ret[sth] = a[sth];
}
}
return ret;
}
console.log
(
copy({name:"马良",age:"31",Books:[{name:"C#入门经典",title:"好书"},
{name:"js入门经典",title:"好书"}]}
)
);
</script>

结果如下

里面的变量经常会变,经过调查发现之前的变量没有var 关键字,以至于变量都是全局变量,所以上面的代码中的变量前面都加var,保持变量的独立性。

变量 var和不加var的区别在于var 声明的变量是局部变量。不用var生命的变量是全局变量。

JavaScript对象复制(二)的更多相关文章

  1. JavaScript对象复制(一)(转载)

    在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ...

  2. Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)

    此文来记录学习笔记: 今天继续说Ext.Array,Ext.Function,Ext.Date,Ext.Error ------------------------------------------ ...

  3. JavaScript对象复制

    近期项目因为怕数据污染所以用到了js的对象复制 js里的对象都是继承自object,是引用类型,所以无法通过=号复制 所以整理了一些常用的复制方法,如下 一.通过JSON序列化和反序列化创建新的对象 ...

  4. JavaScript对象属性(二)

    对象object  例子一: var car = { "wheels":4, "engines":1, "seats":5}; 例子二: v ...

  5. Javascript 对象复制

    如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法.效率比较低. 可以采用如下递归的方式复制一个对象. function clone(target) { ...

  6. Javascript 对象复制(深浅拷贝)

    一.数据类型分类: 基本变量 引用类型 二.什么叫做指针指向 栈内存.堆内存.指针指向(如下红圈圈的斜线). 三.赋值.拷贝.引用区别? 赋值指一个变量赋予某个值,包含两种方式,一种是直接量,另一种, ...

  7. JavaScript对象 创建对象(二)

    组合使用构造函数和原型模式创建对象 function Person(name, age, job){ this.name = name; this.age = age; this.job = job; ...

  8. JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  9. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

随机推荐

  1. 【CodeForces 624D/623B】Array GCD

    题 You are given array ai of length n. You may consecutively apply two operations to this array: remo ...

  2. Min_25 筛

    Min_25 筛 yyb好神仙啊 干什么用的 可以在\(O(\frac{n^{\frac 34}}{\log n})\)的时间内求积性函数\(f(x)\)的前缀和. 别问我为什么是这个复杂度 要求\( ...

  3. BZOJ 2159: Crash 的文明世界(树形dp+第二类斯特林数+组合数)

    题意 给定一棵 \(n\) 个点的树和一个常数 \(k\) , 对于每个 \(i\) , 求 \[\displaystyle S(i) = \sum _{j=1} ^ {n} \mathrm{dist ...

  4. 自学Linux Shell16.3-函数递归+创建库

    点击返回 自学Linux命令行与Shell脚本之路 16.3-函数递归+创建库 1. 函数递归 递归调用函数是指函数调用自身进行求解. 通常,递归函数有基值,函数最终递推到达该值. 许多高级数学算法使 ...

  5. [luogu4264][USACO18FEB]Teleportation

    题解 先吐槽一波题目:便便传送门,出题人还真的有一点厉害的滑稽. 废话不多说. 首先问题的本质就是求如果当这个传送门的端点位于\(y\)的时候,最小的求出总代价,我们设为函数\(f(y)\). 因为这 ...

  6. MD5 SHA1 CRC32

    md5: import hashlib md5 = hashlib.md5() md5.update(bytes('http://www.baidu.com',encoding="utf-8 ...

  7. [HAOI2015]按位或(min-max容斥,FWT,FMT)

    题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...

  8. HASH 字符串哈希 映射转化

    哈希HASH的本质思想类似于映射.离散化. 哈希,通过给不同字符赋不同的值.并且钦定一个进制K和模数,从而实现一个字符串到一个模意义下的K进制数上. 它的主要目的是判重,用于$DFS$.$BFS$判重 ...

  9. Pentaho BI server 中 CCC table Component 的使用小技巧

    我使用的版本 Pentaho BI Server 5.3.0.0.213 CDE/CDF/CDA/CCC 15.04.16 stable   Q: 如何设置表格中各种提示文字的语言(默认为英语)? C ...

  10. 上传znbsite

    1.将本地文件打包为zip: 2.备份服务器上的classes文件夹下面的配置文件: 3.上传zip,释放到tomcat下: 4.覆盖classes文件夹中的配置文件,启动tomcat: