Javascript 数组项被覆盖

标签 javascript arrays object

我有以下代码。

代码迭代 jsonRow 对象的集合,将它们推送到 jsonRows 数组中,然后逐个属性重置 jsonRow 对象。

此重置会导致 jsonRows 数组中的 jsonRow 对象受到影响。 此行为有任何线索吗?

for(iterating over collection of jsonRow objects){
    if(0 < jsonRow.id.length && 0 < jsonRow.title.length){
        jsonRows.push(jsonRow);

        console.log('jsonRow in jsonRows is intact', jsonRows);

        for(var prop in jsonRow){ 
            jsonRow[prop] = '';                     
        }
        console.log('jsonRow properties in jsonRows are ""', jsonRows);
    }
}

最佳答案

jsonRows 中的对象与您“重置”的对象是相同的。 JavaScript 通过 parameters by references 。 如果您不希望更改反射(reflect)在您插入数组的对象中,则需要克隆这些对象。

例如:

for(iterating over collection of jsonRow objects){
  if(0 < jsonRow.id.length && 0 < jsonRow.title.length){
    jsonRows.push(Object.assign({}, jsonRow));

    console.log('jsonRow in jsonRows is intact', jsonRows);

    for(var prop in jsonRow){ 
        jsonRow[prop] = '';                     
    }
    console.log('jsonRow properties in jsonRows are ""', jsonRows);
  }
}

关于Javascript 数组项被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37041574/

相关文章:

javascript - Angular 将字符添加到数组中

javascript - 在 JavaScript 函数中更改数组会更改函数外的数组?

javascript - html - 将 json 附加到链接的正确方法

javascript - 为什么 console.error 是方法而不是函数?

javascript - 如何将 ScrollView 与嵌套的 FlatList 一起使用?

ios - 使用 Parse 在 PFQuery 之外重新调整空白数组的数组。

复制数组导致 0?

c++ - 如何将文本更改为语音以及如何将字符插入字符数组

c++ - 必须是非静态成员函数

c++ - 将 C++ 对象传递给 CUDA 内核