Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ошибка при переборе массива объектов (https://javascript.ru/forum/misc/63862-oshibka-pri-perebore-massiva-obektov.html)

ilya111 05.07.2016 03:26

Ошибка при переборе массива объектов
 
Ребята, уже голову сломал. в функции moveDown() перебираю массив объектов, чтобы найти объект, где его свойство value не равно 0. Хочу изменить свойство value следующего объекта. Однако браузер ругается - Cannot read property 'число' of undefined. При чем в console.log он видит этот объект. Пометил в коде где конкретно стопорнулся.



var foo = [];
function Dog(x, y) {
this.value = 0;
this.x = x;
this.y = y;
}

for (i = 0; i < 4; i++) {
foo[i] = [];
for (j = 0; j < 4; j++) {
foo[i][j] = new Dog(i, j);
}
}

function remdom(){
var first = Math.floor(Math.random() * 4),
second = Math.floor(Math.random() * 4);
foo[first][second].value = 2 * (Math.floor(Math.random() * 2) + 1);

}
remdom();
document.onkeydown = function (event) {
if (event.keyCode == 40 || event.keyCode == 83) moveDown();
}
function moveDown(){
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if(foo[i][j].value){
foo[i][j].value = 4;
foo[i+1][j].value = 8; // Не присваивается значение свойства объекта пишет Cannot read property 'число' of undefined

}


}
}
}

Decode 05.07.2016 04:20

ilya111, мб так?
function moveDown(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr[i].length; j++) {
      if(arr[i][j].value && j < arr[i].length - 1) {
        arr[i][j].value = 4;
        arr[i][j + 1].value = 8;
      }
    }
  }
}

ilya111 05.07.2016 14:50

Спасибо!!


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