我有以下代码。
代码迭代 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/