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

typescriptJava

1个回答

写回答

QQ喬

2025-08-28 02:25

+ 关注

Java
Java

使用JavaScript的Map对象可以方便地存储键值对,并且可以通过键来快速查找对应的值。然而,默认情况下,Map对象是区分大小写的,这意味着如果我们使用不同的大小写来搜索键,将无法找到对应的值。但是,我们可以通过一些方法来实现不区分大小写的搜索。

案例代码:

Javascript

// 创建一个不区分大小写的Map对象

class CaseInsensitiveMap extends Map {

constructor(entries) {

super(entries);

// 将所有键转换为小写存储

this.lowerCaseKeys = new Map();

for (const [key, value] of this.entries()) {

this.lowerCaseKeys.set(key.toLowerCase(), key);

}

}

// 重写get方法,将键转换为小写后再查找对应的值

get(key) {

const lowerCaseKey = this.lowerCaseKeys.get(key.toLowerCase());

return super.get(lowerCaseKey);

}

// 重写set方法,将键转换为小写后再存储键值对

set(key, value) {

const lowerCaseKey = key.toLowerCase();

this.lowerCaseKeys.set(lowerCaseKey, key);

return super.set(lowerCaseKey, value);

}

}

// 创建一个不区分大小写的Map对象

const map = new CaseInsensitiveMap();

map.set("Apple", "苹果");

map.set("Banana", "香蕉");

map.set("Cherry", "樱桃");

// 输出不区分大小写的搜索结果

console.log(map.get("Apple")); // 输出:"苹果"

console.log(map.get("banana")); // 输出:"香蕉"

console.log(map.get("CHERRY")); // 输出:"樱桃"

实现不区分大小写的搜索

在上面的案例代码中,我们创建了一个名为CaseInsensitiveMap的类,继承自JavaScript的Map对象。该类重写了getset方法,以实现不区分大小写的搜索。

在构造函数中,我们使用一个额外的Map对象lowerCaseKeys来存储键的小写形式和原始键之间的映射关系。这样,在调用get方法时,我们可以先将要搜索的键转换为小写形式,然后通过lowerCaseKeys找到对应的原始键,再通过调用父类Mapget方法来获取对应的值。

类似地,在调用set方法时,我们也先将要存储的键转换为小写形式,然后在lowerCaseKeys中存储键的映射关系,最后调用父类Mapset方法来存储键值对。

这样,我们就可以通过不区分大小写来搜索Map中的键值对了。在上面的案例中,我们分别使用不同的大小写形式来搜索AppleBananaCherry,并成功找到了对应的值。

JavaScript的Map对象是一个非常有用的数据结构,可以用于存储和查找键值对。然而,默认情况下,Map对象是区分大小写的,如果我们希望实现不区分大小写的搜索,可以通过继承Map对象并重写get和set方法来实现。这样,我们就可以方便地进行不区分大小写的键值对搜索了。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号