Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2017, 12:19
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

Не могу получить доступ к элементам объектов в 2х мерном массиве
Есть трехмерный массив с объектами внутри которых нужные мне значения. Нужно перебрать проверить несколько значений и на основе этих данных собрать двухмерный массив состоящий из нулей и единиц. Во время перебора у первоначального массива все значения видны как ноль. Если при каждой итерации выводить в консоль объект то половина переменных нулевые, но если раскрыть каждый (кликнуть на него), то все показывает правильно.

Примерный код:
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, 26.02.2017 в 12:26.
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2017, 12:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

WaldeMar1321,
то есть нужно самим догадаться о структуре this.Area
Ответить с цитированием
  #3 (permalink)  
Старый 26.02.2017, 16:00
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

this.Area это 3х мерный массив. массив массивов с массивами, где каждый элемент крайнего массива это экземпляр класса Heap (насколько классы возможны в js). Этот класс содержит нужные мне значения типа number.
Ответить с цитированием
  #4 (permalink)  
Старый 26.02.2017, 16:10
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

this.Area = [
             [
               [Heap, Heap, Heap]
             ],
             [
               [Heap, Heap, Heap]
             ],
             [
               [Heap, Heap, Heap]
             ],
             [
               [Heap, Heap, Heap]
             ]
            ];

Вот структура. Ее пример

Последний раз редактировалось WaldeMar1321, 26.02.2017 в 16:24.
Ответить с цитированием
  #5 (permalink)  
Старый 26.02.2017, 16:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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;
}
Ответить с цитированием
  #6 (permalink)  
Старый 26.02.2017, 16:39
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

Так выдаст ошибку типа "обращение к несуществующему элементу массива".
Для наглядности: индекс i - это этаж (здесь он пока один), индекс y - это строки квадратных метров, индекс x - конкретный квадратный метр на строке.
Ответить с цитированием
  #7 (permalink)  
Старый 26.02.2017, 16:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

WaldeMar1321,
ой! а тут ошибок нет
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()));
Ответить с цитированием
  #8 (permalink)  
Старый 26.02.2017, 16:50
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

на первом изображении как видит скрипт, на втором как оно есть на самом деле (немного промазал с конкретными объектами на этих изображениях, но суть та же) Там ошибок нет. Я показал вам структуру схематически. в коде все делается в цикле. Вам ведь известно что такое многомерный массив? Меня удивило что вы хотите его у меня узнать. Если бы при инциализации были бы ошибки, в консоли объекты вообще бы не показывались. Значение 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 тоже берутся такие какими должны быть
Изображения:
Тип файла: jpeg one.jpeg (13.1 Кб, 2 просмотров)
Тип файла: jpeg two.jpeg (10.7 Кб, 4 просмотров)

Последний раз редактировалось WaldeMar1321, 26.02.2017 в 17:11.
Ответить с цитированием
  #9 (permalink)  
Старый 26.02.2017, 17:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

WaldeMar1321,
не осилил -- вы дали структуру получили решение, ждите телепата который угадает какой у вас на самом деле многомерный массив, и что вы хотите получить из него, я пас.
Ответить с цитированием
  #10 (permalink)  
Старый 27.02.2017, 02:52
Интересующийся
Отправить личное сообщение для WaldeMar1321 Посмотреть профиль Найти все сообщения от WaldeMar1321
 
Регистрация: 14.01.2016
Сообщений: 12

первое изображение это инициализация массива, второе его вывод полностью console.log(this.Area) третье развернутый вид на вывод
Изображения:
Тип файла: jpg one.jpg (12.8 Кб, 3 просмотров)
Тип файла: jpeg two.jpeg (5.4 Кб, 3 просмотров)
Тип файла: jpg theww.jpg (12.6 Кб, 3 просмотров)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить доступ к объекту Ext.Window из внутреннего HTML-контейнера vittaliy ExtJS 0 07.01.2011 11:13
Выборка объектов, как получить отдельно каждый? Karandash jQuery 2 11.02.2010 11:29
Не могу получить id элементов в таблице. LowCoder Общие вопросы Javascript 2 05.07.2009 14:53
Не могу получить доступ к ячейке таблицы Andrey2005 Элементы интерфейса 4 15.06.2009 00:34
Не могу получить высоту из css asci Общие вопросы Javascript 5 30.03.2009 13:31