javascript - 存储数组问题?
巴扎黑
巴扎黑 2017-04-11 12:25:31
[JavaScript讨论组]

为什么我保存的数据都会变成最后一个数据内容??为什么我点击输出内容比如第一条的
["小红", "90", "50", "80", "220"]里面的内容会是小猪,70,70,20,160????真的想不明白哪错了?

巴扎黑
巴扎黑

全部回复(1)
黄舟

关键就是temp这个变量,你没有重置。
首先你的temp是一个数组,当内嵌的for循环完,temp基本是存着一组数据了。然后你就把它push到this.data去了。
可是第二波循环的时候,这时你的temp保留着第一组数据,这个时候其实应该给temp一个清空temp=[];,但是你没有。这就意味着,你这时候只是对着原来那组数据做覆盖操作,而push到data里的是数组,也就是对象,其实际data的元素存储的是temp原来那个对象的地址(也就是data数组里的元素跟temp变量指向同一份数据),这个时候你覆盖temp数组里的元素,那么相当于data里的对应的也被修改到了,所以最终你会发现怎么几组数据都变成了同一组。

你可以做一个简单的代码校验一番

var t = [];
t[0]=1;
t[1]=2;
var b = [];
b.push(t);// [Array(1,2)]
t[0]=3;
b.push(t);// [Array(3,2),Array(3,2)]

所以在嵌套循环中,有些变量,比如这里的temp,每一波循环,记得重置一下。当你重置temp的时候,实际就是temp指向了新的一个空间,这样就跟data存的之前那个temp分离开来,就不会有你遇到这种问题。这其中的概念,个人相对不是很精确,有什么不对的,麻烦指出~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号