程序开发 · 2023年8月12日

JS Arrays.push 在 For 循环中添加元素输出重复的原因是什么?

js arrays.push 在 for 循环中添加元素输出重复的解决方法

实现动态添加字段时,往往会使用数组来存储输入数据。但在使用 push 方法将对象添加到数组的 for 循环中时,可能会遇到输出重复的问题。

问题分析

该问题的原因在于对象是一个引用数据类型,在 for 循环外部创建的对象变量指向堆内存中的同一个对象,导致后续的修改会影响所有数组元素。

解决方案

要解决这个问题,需要将对象的创建移至 for 循环内部。这样,每次迭代都会创建一个新的对象,并将其添加到数组中。

代码示例

for(let index=1; index<=currentid; index++) {
    // 每次循环创建新的对象
    const products = {};
    products['name'] = $("#name_"+index+"").val();
    console.log(products['name']);
    arrays.push(products);
}

登录后复制

延伸知识

JS 中的数据存储分为原始数据类型和引用数据类型。原始数据类型存储在栈中,引用数据类型存储在堆中。对象是引用数据类型,通过地址引用堆中的数据。在 for 循环外创建对象,会导致所有数组元素指向同一对象,修改时也会同时修改。将对象创建移至循环内,可以避免此问题。

以上就是JS Arrays.push 在 For 循环中添加元素输出重复的原因是什么?的详细内容,更多请关注GTHOST其它相关文章!