Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Двумерный массив обьектов (https://javascript.ru/forum/css-html/48498-dvumernyjj-massiv-obektov.html)

jeka123 06.07.2014 16:10

Двумерный массив обьектов
 
ребят такая проблема хочу присвоить значение обьекту в двухмерном массиве
chip = true но присвоение идет для всех элементов массива.Почему?
var n = 4, m = 4,player = 2;
var pl_list_1 = [];
var pl_list_2 = [];
var sea = {
   chip :false,
   opened:false,
   msg:'Промазал'
};
 
for (var i = 0; i < m; i++){
    pl_list_1[i] = [];
    pl_list_2[i] = [];
    for (var j = 0; j < n; j++){
        pl_list_1[i][j] = sea;
        pl_list_2[i][j] = sea; 
        
}}
for (var z = 1; z <= player; z++){
do {
    var x = prompt(z+' Игрок\nВведите ваши координты кораблей');
    var y = prompt(z+' Игрок\nВведите ваши координты кораблей');
    message = confirm(z +' Игрок вы продолжаете ввод?');
     putship(x,y,z);
   } while (message ===true);
}
//console.log(pl_list_1);
//console.log(pl_list_2);
alert('Война началась!');
  console.log(pl_list_1);
function putship(x,y){
  alert(x);alert(y);
  pl_list_1[x][y].chip = true;
}

Sweet 06.07.2014 16:28

Цитата:

Сообщение от jeka123
присвоение идет для всех элементов массива.Почему?

Потому что все элементы массивов ссылкаются на один и тот же объект. Нужно сделать, чтобы это были разные объекты. Вариантов куча:
1.
pl_list_1[i][j] = new Sea;
        pl_list_2[i][j] = new Sea;

function Sea() {
    this.chip = false;
    this.opened = false;
    this.msg = 'Промазал';
}

2
pl_list_1[i][j] = getSea();
        pl_list_2[i][j] = getSea();

function getSea() {
    return {
        chip :false,
        opened:false,
        msg:'Промазал'
    };
}

3.
var sea = {
   chip :false,
   opened:false,
   msg:'Промазал'
};

        pl_list_1[i][j] = Object.create(sea);
        pl_list_2[i][j] = Object.create(sea);

4.
pl_list_1[i][j] = {
            chip :false,
            opened:false,
            msg:'Промазал'
        };
        pl_list_2[i][j] = {
            chip :false,
            opened:false,
            msg:'Промазал'
        };
Все эти варианты, на первый взгляд, работают одинаково. Но все они разные и каждый имеет свои особенности. Такие дела.

jeka123 06.07.2014 16:56

оооо Спасибо блин а я не знал я думал что просто если обьект sea присвоить будет все норм.Спасибо большое!!


Часовой пояс GMT +3, время: 07:03.