JavaScript Map键值对不区分大小写的搜索

时间:2018-04-25 10:27:54

标签: typescript

我在TypeScript中使用Map字典,我希望get和has属性不区分大小写。我怎样才能做到这一点?

    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#中,Dictionary构造函数只需要StringComparer.OrdinalIgnoreCase,然后字典将不区分大小写。

1 个答案:

答案 0 :(得分:4)

Map不支持此行为。它可以扩展,以便以不区分大小写的方式存储和查找密钥。由于Map在内部使用set构建,因此它是唯一需要增强的方法。

在使用es5目标的TypeScript中进行扩展时,应以特殊方式处理本机类。可以这样做:

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);
  }
}
相关问题