考虑这种情况,我们有模型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);
}

07-24 19:22