本文探讨javascript中使用arrays.push方法向数组添加元素时,for循环导致重复输出的问题及解决方案。 问题源于在动态添加表单字段时,循环中将同一个对象反复添加到数组,导致最终数组中所有元素都指向同一个对象,显示最后一个值。
以下代码片段展示了错误的代码:
form.on('submit(*)',function(data) { var arrays=new Array(); var products={}; // 错误:products对象声明在循环外 var for_id=1; for(let index=0; index<currentid; index++){ // ... 获取字段值 ... products = {/* 字段值 */}; // 更新同一个products对象 arrays.push(products); console.log(false); // 此处console.log输出不影响问题 } var json_arrays = JSON.stringify(arrays); return false;});
登录后复制
问题在于products对象声明在for循环外部。每次循环都只是修改了同一个products对象,而不是创建新的对象。因此,arrays数组中存储的都是指向同一个products对象的引用。
解决方案是将products对象的声明移入for循环内部:
form.on('submit(*)',function(data) { var arrays=new Array(); var for_id=1; for(let index=0; index<currentid; index++){ // ... 获取字段值 ... var products = {/* 字段值 */}; // 正确:products对象声明在循环内 arrays.push(products); } var json_arrays = JSON.stringify(arrays); return false;});
登录后复制
这样,每次循环都会创建一个新的products对象,arrays数组中存储的是不同对象的引用,从而避免了重复输出的问题。 这体现了JavaScript中引用类型和值类型的区别: 对象是引用类型,数组存储的是对象的引用,而非对象的副本。 将products声明在循环内,确保每次迭代都创建一个新的对象,解决重复输出问题。
立即学习“Java免费学习笔记(深入)”;
修改后的代码避免了重复输出,确保每个表单字段的值都被正确地添加到数组中。 记住,对于对象等引用类型,需要在循环内重新创建新的实例,才能避免数据被覆盖。
以上就是JavaScript数组push方法循环添加元素时,如何避免重复输出的问题?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2791675.html