@Aricce

Как получить значения Map или правильный размер объекта?

Здравствуйте, основная суть вопроса такова: есть класс, в конструкторе есть объект Map, который в качестве значений используются тоже Map (Есть здание, в нем с 1 по 5 этаж, на этаже с 1 по 4 комнату) в свою очередь состоящий из Mesh (ThreeJS), все что мне нужно получить все объекты одного этажа, а точнее просто получить массив значений Map, казалось бы что может быть проще? Но вот только Map:
1) через forEach как в статье https://developer.mozilla.org/ru/docs/Web/JavaScri... не перебирается от слова совсем
2) через for где
а) от i до map.size не перебирается т.к. size почему-то 0, хотя объект не пустой (в js довольно часто такая дичь что объект не пустой, но его длина 0, или наоборот длина не ноль, но сам он пустой, хотя и в том и в том случае объект не пустой и размер больше 0 по задумке)
б) где for(let value of map.values()) { array.push(value)} тоже не работает, вообще без понятия почему
3) через Array.from(map) - возвращает пустой массив (как и [ ...map ])

это только то что сразу вспомнил, а так этих способов 5-6 было.
Так вот, как же все таки получить значения из map?(И что блин c JS вообще не так?! )
Если вывести map в консоль, то он все выводит:
//Console:
Map(0) {}
[[Entries]]
0: {"01B01F01OUTBORDER" => Mesh}
1: {"01B01F01ROOM" => Mesh}
2: {"01B01F02ROOM" => Mesh}
3: {"01B01F03ROOM" => Mesh}
size: 4 (но если написать console.log(map.size) то пишет что size 0, необъяснимо но факт)
основная функция, в которой я пытаюсь получить значения getFloorMeshes. Мой код класса ниже. Так же стоит упомянуть что пробовал расставлять async\await и даже в промисах разобраться, что вообще какая-то дичь(нет я понимаю что умные дяди не просто так, наверное, это придумали, но дичь же бессмысленная, но не важно) и все равно ничего не помогло.
Заранее спасибо всем неравнодушным.

class BuildBuilder {
	setFloorMap(floorCnt){
		for(let i =1;i<=floorCnt;i++)
		{
			let floor = new Map();
			this.floors.set(i,floor);
			
		}
		
	}
    constructor(name, floorCnt) {
        this.name = name;
        this.floorCnt = floorCnt + 1;
        this.floors = new Map();
        this.objCnt = 0;
		this.setFloorMap(this.floorCnt);
		//this.objects=[];
    }
    add(mesh, floor) {
        this.floors.get(floor).set(mesh.name,mesh);
		//this.objects.push(mesh);
        console.log(mesh.name+' is added on '+floor+' floor of '+this.name);
        this.objCnt++;
    }
	getFloorMap(floor){
		return this.floors.get(floor);
	}
getFloorMeshes(numFloor){   
	    var map= this.floors.get(numFloor);
	    return Array.from(map);
		console.log(map);

    }
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы