[英]Group case sensitive values using Javascript
考虑这个场景,我们有模型 ABC23x、ABC23X 和 abc23X。 它们指的是相同的 model。 此 model 名称列表来自 api 端点。
现在 UI 有两件事要做:
我需要一些帮助来实现这个功能。 我尝试使用 MAP 并没有按预期工作。
let models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y']; let mappedModels = new Map(models.map(s => [s.toUpperCase(), s])); console.log(mappedModels);
这是小提琴
我正在使用 angular 6。任何帮助/建议都会非常有帮助。
您当前遇到的问题是每个新密钥都会覆盖旧密钥。 这是发生的事情:
'tc75X'
-> key is 'TC75X'
-> 被添加到 Map 作为'TC75X' -> ['tc75X']
'TC75X'
->键是'TC75X'
->作为'TC75X' -> ['TC75X']
所以你只得到一个值而不是两个。
相反,您应该将 go 分组为:
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); }
你可以做这样的事情。 首先我们创建密钥。 然后,如果密钥不在 map 中,我们将创建一个新数组。 然后我们用新数组设置值。
const models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y'];
const mappedModels = new Map();
for (const model of models) {
const key = model.toUpperCase();
let set = mappedModels.get(key);
if (!set) {
set = [];
}
set.push(model);
mappedModels.set(key, set);
}
console.log(mappedModels);
您可以将模型保存为 object。 每个唯一键定义了大写的 model ,其值是不同大小写的 model 数组。
const models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y'];
const map = models.reduce((res, model) => {
const uppercasedModel = model.toUpperCase();
if (!res[uppercasedModel]) {
res[uppercasedModel] = [model];
} else {
res[uppercasedModel].push(model);
}
return res;
}, {})
console.log(map);
let models = ['tc75X', 'TC75X', 'tc75x', 'TC75x', 'TC76x', 'TC77Y']; let mappedModels = models.reduce((acc, c) =>{ let cUp = c.toUpperCase(); acc[cUp] = acc[cUp] || []; acc[cUp].push(c); return acc }, {}); for (let [key, value] of Object.entries(mappedModels)) { console.log(`${key}: ${value}`); }
你可以使用reduce
方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.