JavaScript сопоставляет пары ключ-значение без учета регистра - PullRequest
0 голосов
/ 25 апреля 2018

Я использую словарь Map в TypeScript, и я хочу, чтобы get и имел свойства для работы без учета регистра.Как я могу сделать эту работу?

    let envVariables = new Map<string, string>();
    envVariables.set('OS', 'Windows_NT');
    envVariables.set('USERNAME', 'SYSTEM');
    if (this.envVariables.has('UserName')) {
      // this should work with case insensitive search
    }

В C # для конструктора словаря просто необходим StringComparer.OrdinalIgnoreCase, и тогда словарь будет нечувствительным к регистру.

1 Ответ

0 голосов
/ 25 апреля 2018

Map не поддерживает это поведение. Он может быть расширен для хранения ключей и их поиска без учета регистра. Поскольку Map внутренне использует set при создании, это единственный метод, который необходимо дополнить.

Собственные классы должны обрабатываться особым образом при расширении в TypeScript с целью es5. Это можно сделать так:

interface CaseInsensitiveMap<T, U> extends Map<T, U> {} 
class CaseInsensitiveMap<T, U> {
  constructor(entries?: Array<[T, U]> | Iterable<[T, U]>) {
    return Reflect.construct(Map, arguments, CaseInsensitiveMap);
  }

  set (key: T, value: U): this {
    if (typeof key === 'string') {
      key = <T><any>key.toLowerCase();
    }
    return Map.prototype.set.call(this, key, value);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...