考虑这种情况,我们有模型ABC23x,ABC23X和abc23X。他们指的是同一模型。型号名称列表来自api端点。
现在,UI要做两件事:
仅显示一个型号名称(ABC23X)
在调用rest api时,我们必须发送所有可能的值([ABC23x,ABC23X,abc23X])
我需要一些帮助来实现此功能。我尝试使用MAP来解决问题,但未按预期工作。
let models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y'];
let mappedModels = new Map(models.map(s => [s.toUpperCase(), s]));
console.log(mappedModels);
这是fiddle
我正在使用angular6。任何帮助/建议都将非常有帮助。
最佳答案
您当前遇到的问题是,每个新密钥都将覆盖旧密钥。这是发生了什么:
您得到'tc75X'
->键是'TC75X'
->作为'TC75X' -> ['tc75X']
添加到地图中
您得到'TC75X'
->键是'TC75X'
->作为'TC75X' -> ['TC75X']
添加到地图中
因此,您只会获得一个值,而不是两个。
相反,您应该在进行时进行分组:
如果当前模型没有键,则将其添加到地图。
将当前值添加到地图。
let models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y'];
let mappedModels = models.reduce((map, modelName) => {
const normalisedKey = modelName.toUpperCase();
//1. Add entry if not present
if (!map.has(normalisedKey)) {
map.set(normalisedKey, [])
}
//2. Add to entry for this key
map.get(normalisedKey).push(modelName);
return map;
}, new Map())
for(let [key, value] of mappedModels) {
console.log(key, "->", value);
}