Здравствуйте, основная суть вопроса такова: есть класс, в конструкторе есть объект 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);
}