使用Javascript对区分大小写的值进行分组
考虑这个场景,我们有ABC23x、ABC23x和ABC23x模型。它们指的是同一型号。此模型名称列表来自api端点 现在UI有两件事要做:使用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)
- 调用RESTAPI时,我们必须发送所有可能的值([ABC23x,ABC23x,ABC23x])
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,数组将有多个不区分大小写的值。将尝试两种解决方案,并根据我的发现接受它。谢谢你们两位。