javascript push一个对象遇到的问题。
来源:互联网 发布:第一会所会员账号 淘宝 编辑:程序博客网 时间:2024/05/20 21:48
在appcan中使用js数组 push一个对象遇到的问题
错误的使用如下:
var listData = [];
if(data){
var tmp = {"title":"","pagename":"","area_id":"","isOver":""};
for (var i=0; i < data.length; i++) {
tmp.title = "<div class='ub'><div class='ub ub-f1'>"+data[i]['area_name']+"</div><div class='ub'><div class='ub-img setup-icon0 umw2 umh1'></div></div></div>";
tmp.pagename = data[i]['area_name'];
tmp.area_id = data[i]['city_id'];
tmp.isOver = data[i]['isleaf'];
listData.push(tmp);
};
}else{
listData = [{'title':"<div class='ub'><div class='ub ub-f1'>无数据</div><div class='ub'><div class='ub-img setup-icon0 umw2 umh1'></div></div></div>",'pagename':'无','area_id':'0'}]
}
当你console.log(listData)时,你会发现listData里的数组元素都是最后一个对象。因为tmp声明在for循环之外,当listData数组push这个tmp对象时,一直是同一个对象,而并不是将对象的数据压入,只是在listData数组建立了一个对象的引用关系。故随着for的i值改变,tmp对象内部的内容也跟着改变,而listData压入的对象却始终是tmp这个对象(tmp生命周期不受for循环影响)。所以最终console.log(listData)出来的对象数组里面的元素都是一样的数据。简言之:就是tmp对象的数据再变,但是listData压入的tmp却是不变的。
正确的使用如下:
var listData = [];
if(data){
for (var i=0; i < data.length; i++) {
var tmp = {"title":"","pagename":"","area_id":"","isOver":""};
tmp.title = "<div class='ub'><div class='ub ub-f1'>"+data[i]['area_name']+"</div><div class='ub'><div class='ub-img setup-icon0 umw2 umh1'></div></div></div>";
tmp.pagename = data[i]['area_name'];
tmp.area_id = data[i]['city_id'];
tmp.isOver = data[i]['isleaf'];
listData.push(tmp);
};
}else{
listData = [{'title':"<div class='ub'><div class='ub ub-f1'>无数据</div><div class='ub'><div class='ub-img setup-icon0 umw2 umh1'></div></div></div>",'pagename':'无','area_id':'0'}]
}
当把tmp对象的声明放在for循环内时,tmp对象的生命周期是受for循环影响的,每循环一次,tmp就会释放再重新生成。故for中的tmp在循环中都是不用的对象,因此压入到listData中就是不同的数据。简言之就是:tmp对象数据在变,listData压入的tmp也在变。
当时打印数据是,看到数据一样时,有点找不到北,后来仔细分析,才发现是tmp对象使用的问题。看来基本功不扎实啊!
- javascript push一个对象遇到的问题。
- 刚开始使用push遇到的小问题
- javascript创建对象的方法和遇到问题的解决方法
- js 的数组怎么push一个对象
- JavaScript----遇到的问题
- JavaScript----遇到的问题
- 遇到一个关于调用javascript语句不起作用的问题
- 遇到的一个问题
- 遇到的一个问题
- adb push 命令的使用及遇到的问题
- Ubuntu上git push到GitHub可能会遇到的问题
- AutoLayOut+tabbar push到二级界面遇到偏移的问题
- 使用SourceTree push代码遇到的问题:remote: Permission to
- git push 遇到missing change id的问题
- github向远程push代码遇到的一些问题
- 我遇到的问题(javascript)
- 学JavaScript遇到的问题
- 今天遇到一个关于对象和对象方法内存分配的有趣的问题
- 本地电脑与远程服务器直接复制粘贴无法使用
- 利用Python和PyQt5实现简易浏览器
- sql中exists、no exists & in、no in
- 2017年学习什么编程语言吃香?
- windows共享打印机
- javascript push一个对象遇到的问题。
- C++中<string><cstring><string.h>的区别
- 项目需求分析:使用 >> & 操作符实现混合匹配
- linuxC系统编程——线程管理
- 添加uv贴图
- java深度复制dozer,替代beanutils
- MySQL数据库的一些基本操作及注释
- ArcGIS Pro系列教程之制图(布局)
- springmvc整合mybatis框架源码 bootstrap html5