@historydev
Острая аллергия на анимешников

Как получить объект в объекте по строковому ключу в filter методе?

const logger = require('node-color-log');

class Args {
  available = {
    '--test': {
      isValueRequired: true,
    },
  };
  passed = [];
  names = [];

  constructor() {}

  listen = () => {
    this.passed = process.argv.slice(2); // получаю массив аргументов и удаляю первые два.
    this.names = this.passed.filter((_) => _.indexOf('--') > -1); // фильтрую переданные значения чтобы получить содержащие "--" и получаю список имён аргументов.
    logger.debug(this.names); // ['--test']
    this.names.filter((name) => {
      logger.debug(typeof name); // string
      logger.debug(name); // --test
      logger.debug(this.available[name]); // undefined
      logger.debug(this.available['--test']); // {"isValueRequired": "true"}
      logger.debug(this); // this здесь всё ок, доступ к this.available есть
      return !this.available[name].isValueRequired;
    });

    return this;
  };

  get available() {
    return this.available;
  }
}

const args = new Args();

args.listen();


Ошибка:
Arguments.js:102
            return !this.available[name].isValueRequired
                                         ^

TypeError: Cannot read properties of undefined (reading 'isValueRequired')


Node.js v20.11.0

Загрузил на песок, там работает: https://stackblitz.com/edit/node-xygtcf?file=index.js
Выполнить: node index.js --test 123

❯ node -v
v18.18.0
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Очевидно, что входящий --test и --test в объекте не равны. Пробелы там, спецсимволы, ещё что-то. Другого варианта просто нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы