使用Javascript对区分大小写的值进行分组

使用Javascript对区分大小写的值进行分组,javascript,angular,typescript,user-interface,Javascript,Angular,Typescript,User Interface,考虑这个场景,我们有ABC23x、ABC23x和ABC23x模型。它们指的是同一型号。此模型名称列表来自api端点 现在UI有两件事要做: 仅显示一个型号名称(ABC23X) 调用RESTAPI时,我们必须发送所有可能的值([ABC23x,ABC23x,ABC23x]) 我需要一些帮助来实现这个功能。我试着用MAP来解决这个问题,但并没有达到预期效果 let models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y']; 让mappedM

考虑这个场景,我们有ABC23x、ABC23x和ABC23x模型。它们指的是同一型号。此模型名称列表来自api端点

现在UI有两件事要做:

  • 仅显示一个型号名称(ABC23X)
  • 调用RESTAPI时,我们必须发送所有可能的值([ABC23x,ABC23x,ABC23x])
我需要一些帮助来实现这个功能。我试着用MAP来解决这个问题,但并没有达到预期效果

let models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y'];
让mappedModels=newmap(models.Map(s=>[s.toUpperCase(),s]);

console.log(mappedModels)您可以这样做。首先,我们创建密钥。然后,如果密钥尚未在映射中,我们将创建一个新数组。然后我们用新数组设置值

const models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y'];
const mappedModels=新映射();
for(模型的常数模型){
const key=model.toUpperCase();
设set=mappedModels.get(键);
如果(!set){
集合=[];
}
推(模型);
mappedModels.set(键,set);
}
console.log(mappedModels);

当前的问题是,每个新密钥都会覆盖旧密钥。发生的情况如下:

  • 您得到的
    'tc75X'
    ->键是
    'tc75X'
    ->作为
    'tc75X'->['tc75X']
  • 您得到的
    'TC75X'
    ->键是
    'TC75X'
    ->作为
    'TC75X'->['TC75X']
  • 所以你只能得到一个值,而不是两个

    相反,您应该边走边分组:

  • 如果当前模型没有键,则将其添加到地图中
  • 将当前值添加到地图
  • let models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y'];
    让mappedModels=models.reduce((map,modelName)=>{
    常量normalisedKey=modelName.toUpperCase();
    //1.如果不存在,则添加条目
    如果(!map.has(normalisedKey)){
    map.set(normalisedKey,[]
    }
    //2.添加到此密钥的条目
    map.get(normalisedKey).push(modelName);
    返回图;
    },新映射())
    for(让mappedModels的[键,值]){
    console.log(键“->”,值);
    
    }
    您可以将模型另存为对象。每个唯一键定义大写模型,其值是具有不同大小写的模型数组

    const models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y'];
    常量映射=模型。减少((分辨率,模型)=>{
    const uppercasedModel=model.toUpperCase();
    如果(!res[uppercasedModel]){
    res[uppercasedModel]=[model];
    }否则{
    res[uppercasedModel].push(model);
    }
    返回res;
    }, {})
    控制台日志(map);
    
    let models=['tc75X'、'tc75X'、'tc75X'、'tc75X'、'TC76x'、'TC77Y'];
    让mappedModels=models.reduce((acc,c)=>{
    设cUp=c.toUpperCase();
    acc[杯]=acc[杯]| |[];
    acc[杯].推(c);
    返回acc
    }, {});
    for(让Object.entries的[key,value](mappedModels)){
    log(`${key}:${value}`);
    
    }
    每个键都应该有一个包含所有可能选项的数组?在数组中只保留一个值并用大写字母显示。@SaurabhAgrawal,数组将有多个不区分大小写的值。将尝试两种解决方案,并根据我的发现接受它。谢谢你们两位。