Просмотр полной версии : Не могу получить доступ к элементам объектов в 2х мерном массиве
WaldeMar1321
26.02.2017, 12:19
Есть трехмерный массив с объектами внутри которых нужные мне значения. Нужно перебрать проверить несколько значений и на основе этих данных собрать двухмерный массив состоящий из нулей и единиц. Во время перебора у первоначального массива все значения видны как ноль. Если при каждой итерации выводить в консоль объект то половина переменных нулевые, но если раскрыть каждый (кликнуть на него), то все показывает правильно.
Примерный код:
this.getG = function() {
var grid = [];
var i = 0;
//this.Area 2х мерный массив объектов Heap
for(var y = 0; y < this.Area[i].length; y++) {
grid[y] = [];
for(var x = 0; x < this.Area[i][y].length; x++) {
if(this.Area[i][y][x].ent > 0 || this.Area[i][y][x].flr < 0) {
//Сюда не заходит с этими условиями
grid[y][x] = 1;
//все проверяемые значения нулевые (но это не так) если вывести:
console.log(this.Area[i][y][x]); //Выведет Heap> {obj:0, obj2:0}
//Но если раскрыть это то все значения на месте
} else grid[y][x] = 0;
}
}
return grid;
}
Как мне добраться до нужных мне значений? Условия проверки схематичны. Запускал на Хроме
P.S. В других браузерах тоже самое.
WaldeMar1321,
то есть нужно самим догадаться о структуре this.Area
WaldeMar1321
26.02.2017, 16:00
this.Area это 3х мерный массив. массив массивов с массивами, где каждый элемент крайнего массива это экземпляр класса Heap (насколько классы возможны в js). Этот класс содержит нужные мне значения типа number.
WaldeMar1321
26.02.2017, 16:10
this.Area = [
[
[Heap, Heap, Heap]
],
[
[Heap, Heap, Heap]
],
[
[Heap, Heap, Heap]
],
[
[Heap, Heap, Heap]
]
];
Вот структура. Ее пример
WaldeMar1321,
возможно так
this.getG = function() {
var grid = [];
var i = 0;
//this.Area 2х мерный массив объектов Heap
for(var y = 0; y < this.Area.length; y++) {
grid[y] = [];
for(var x = 0; x < this.Area[y][i].length; x++) {
if(this.Area[y][i][x].ent > 0 || this.Area[y][i][x].flr < 0) {
//Сюда не заходит с этими условиями
grid[y][x] = 1;
//все проверяемые значения нулевые (но это не так) если вывести:
console.log(this.Area[y][i][x]); //Выведет Heap> {obj:0, obj2:0}
//Но если раскрыть это то все значения на месте
} else grid[y][x] = 0;
}
}
return grid;
}
WaldeMar1321
26.02.2017, 16:39
Так выдаст ошибку типа "обращение к несуществующему элементу массива".
Для наглядности: индекс i - это этаж (здесь он пока один), индекс y - это строки квадратных метров, индекс x - конкретный квадратный метр на строке.
WaldeMar1321,
ой! а тут ошибок нет :lol:
this.Area = [
[
[{ent : 1}, {ent : -1}, {ent : 1}]
],
[
[{ent : 1}, {ent : -1}, {ent : 1}]
],
[
[{ent : 1}, {ent : -1}, {ent : 1}]
],
[
[{ent : 1}, {ent : -1}, {ent : 1}]
]
];
this.getG = function() {
var grid = [];
var i = 0;
//this.Area 2х мерный массив объектов Heap
for(var y = 0; y < this.Area.length; y++) {
grid[y] = [];
for(var x = 0; x < this.Area[y][i].length; x++) {
if(this.Area[y][i][x].ent > 0 || this.Area[y][i][x].flr < 0) {
//Сюда не заходит с этими условиями
grid[y][x] = 1;
//все проверяемые значения нулевые (но это не так) если вывести:
console.log(this.Area[y][i][x]); //Выведет Heap> {obj:0, obj2:0}
//Но если раскрыть это то все значения на месте
} else grid[y][x] = 0;
}
}
return grid;
}
alert(JSON.stringify(getG()));
WaldeMar1321
26.02.2017, 16:50
на первом изображении как видит скрипт, на втором как оно есть на самом деле (немного промазал с конкретными объектами на этих изображениях, но суть та же) Там ошибок нет. Я показал вам структуру схематически. в коде все делается в цикле. Вам ведь известно что такое многомерный массив? Меня удивило что вы хотите его у меня узнать. Если бы при инциализации были бы ошибки, в консоли объекты вообще бы не показывались. Значение seed правильно достигается путем this.Area[i][y][x].seed Значение взятое из this.Area[i][y][x].ent является 0 не NaN и не undefined, хотя там не 0
this.Area[i][y][x].x и this.Area[i][y][x].y тоже берутся такие какими должны быть
WaldeMar1321,
не осилил -- вы дали структуру получили решение, ждите телепата который угадает какой у вас на самом деле многомерный массив, и что вы хотите получить из него, я пас.
WaldeMar1321
27.02.2017, 02:52
первое изображение это инициализация массива, второе его вывод полностью console.log(this.Area) третье развернутый вид на вывод
:cray: :help:
WaldeMar1321,
без картинок сделайте как в пост №7 но не хватает похоже третьего цикла
WaldeMar1321
27.02.2017, 08:23
Все заработало.
Проблема оказалась в асинхронности. Так уж получилось что ожидаемый json возвращается позже исполнения всего (пока что) написанного кода.
Спасибо за ответы. (как закрыть тему?)
(как закрыть тему?)
здесь нет этой традиции :)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot