#javascript #multidimensional-array #associative-array
#javascript #многомерный массив #ассоциативный массив
Вопрос:
Я установил значение в ассоциативном массиве в 2D-массиве в JavaScript. Я использовал следующий исходный код:
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);
Я создал 2D-массив, который я заполнил свойствами (ассоциативный массив, все значения false). Затем я установил значение true для isBold для *listOfProperties[2][2]** .
Но почему isBold в listOfProperties[0][0] включает true вместо false?
Ответ №1:
Вам нужно заполнить 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);
Для получения более подробной информации проверьте это.