Карта пуста после заданных значений в forEach. Отладчик показывает, что итеративный массив не пуст - PullRequest
0 голосов
/ 05 января 2020

Если у меня есть этот код

ArbFileProvider. js

const fs = require("fs");

class ArbFile {
  constructor(arbFile) {
    this.arbFile = arbFile;
  }
  async read() {
    const arbFileContents = await fs.promises.readFile(this.arbFile);
    this._arbFileObject = JSON.parse(arbFileContents.toString());
    console.log(this._arbFileObject);
    this._getRessources();
    console.log(JSON.stringify(this.ressources));
    console.log(JSON.stringify(this.properites));
  }

  _getRessources() {
    const ressourcesKeys = Object.keys(this._arbFileObject).filter(
      key => key.match(/^@{1,2}/g) == undefined
    );
    console.log("ressourcesKeys", ressourcesKeys);
    this.ressources = new Map();
    ressourcesKeys.forEach(key => {
      this.ressources.set(key, {
        value: this._arbFileObject[key],
        ...(this._arbFileObject[
          Object.keys(this._arbFileObject).find(val => val == `@${key}`)
        ] || {})
      });
    });
    console.log("ressources", JSON.stringify(this.ressources));

    const propertiesKeys = Object.keys(this._arbFileObject).filter(
      key => key.match(/^@@/g) != undefined
    );
    this.properites = new Map();
    propertiesKeys.forEach(key => {
      this.properites.set(key.replace(/^@@/g, ""), this._arbFileObject[key]);
    });
  }
}

module.exports = ArbFile;

в этой точке

console.log(JSON.stringify(this.ressources));

this.ressources - пустая карта. Я не знаю почему. В отладчике я ясно вижу, что он имеет 55 записей. Я уже пытался зарегистрировать, например, Object.keys (), но это также пустой массив.

Параметр arbFile в конструкторе - это путь к json -подобному файлу ARB.

Чтобы вызвать этот класс, я создаю новый экземпляр ArbFile, а затем вызываю read () для него.

1 Ответ

0 голосов
/ 05 января 2020

Ну вот почему. Это Chrome вывод консоли. Я действительно удивлен, но, очевидно, вы не можете JSON.stringify карту!

var m = new Map();
m.set("a", undefined)
Map(1) {"a" => undefined}
m.set("b", "B")
Map(2) {"a" => undefined, "b" => "B"}
m
Map(2) {"a" => undefined, "b" => "B"}
JSON.stringify(m)
"{}"

Вместо этого попробуйте просто войти в карту напрямую без JSON.stringify.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...