问题描述
我在JavaScript的2D数组中的关联数组中设置了值。我使用了以下源代码:
var properties = {
"isBold": false,"isItalic": false,"isUnderline": false
};
// Creation of 2D array,6x6
var listofProperties = new Array(6);
for (var i = 0; i < listofProperties.length; i++) {
listofProperties[i] = new Array(6);
}
// Population of listofProperties with properties
for (var row = 0; row < listofProperties.length; row++) {
for (var col = 0; col < listofProperties.length; coL++) {
listofProperties[row][col] = properties;
}
}
var property = listofProperties[2][2];
property.isBold = true; // I would like to populate property isBold
console.log("property > " + property.isBold);
var property = listofProperties[0][0];
console.log("property > " + property.isBold);
我创建了一个用 properties 填充的2D数组(关联数组,所有值均为false)。然后为* listofProperties [2] [2] **设置 isBold 的 true 。
但是为什么 listofProperties [0] [0] 中的 isBold 包含 true 而不是 false ?
解决方法
您需要填充对象副本的2D数组,而不是引用:
var properties = {
"isBold": false,"isItalic": false,"isUnderline": false
};
// Creation of 2D array,6x6
var listOfProperties = new Array(6);
for (var i = 0; i < listOfProperties.length; i++) {
listOfProperties[i] = new Array(6);
}
// Population of listOfProperties with properties
for (var row = 0; row < listOfProperties.length; row++) {
for (var col = 0; col < listOfProperties.length; col++) {
listOfProperties[row][col] = Object.assign({},properties);
}
}
var property = listOfProperties[1][1];
property.isBold = true; // I would like to populate property isBold
console.log("property > " + property.isBold);
var property = listOfProperties[0][0];
console.log("property > " + property.isBold);
有关更多详细信息,请检查this。