JavaScript对象复制(二)
2024-08-26 13:22:12
<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生命的变量是全局变量。
最新文章
- leetcode-javascript
- 字符串s中从第i个位置起取长度为len的子串,函数返回子串链表
- JavaScript 正则表达式上——基本语法
- Python学习02 列表 List
- Octopus系列之数据上传格式要求说明
- Jetbrains phpstorm pycharm 免费授权注册码
- hdu 1434 幸福列车
- Chrome资源加载被Cancel的问题
- 在Python3.5下安装和测试Scrapy爬网站
- python科学计算_numpy_函数库
- wget命令企业级应用参数详解
- 模块机制 之commonJs、node模块 、AMD、CMD
- OO的奇妙冒险1
- python-django(环境配置)
- ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本
- linux下一个网卡配置多个IP
- Spark2 Dataset分析函数--排名函数row_number,rank,dense_rank,percent_rank
- 包与常用模块:time,sys。
- oracle JDeveloper学习
- SQL处理数据并发,解决ID自增