本文探讨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声明在循环内,确保每次迭代都创建一个新的对象,解决重复输出问题。
修改后的代码避免了重复输出,确保每个表单字段的值都被正确地添加到数组中。 记住,对于对象等引用类型,需要在循环内重新创建新的实例,才能避免数据被覆盖。
以上就是JavaScript数组push方法循环添加元素时,如何避免重复输出的问题?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论