繁体   English   中英

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

[英]Group case sensitive values using Javascript

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

现在 UI 有两件事要做:

  • 只显示一个 model 名称(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);

这是小提琴

我正在使用 angular 6。任何帮助/建议都会非常有帮助。

您当前遇到的问题是每个新密钥都会覆盖旧密钥。 这是发生的事情:

  1. 你得到'tc75X' -> key is 'TC75X' -> 被添加到 Map 作为'TC75X' -> ['tc75X']
  2. 你得到'TC75X' ->键是'TC75X' ->作为'TC75X' -> ['TC75X']

所以你只得到一个值而不是两个。

相反,您应该将 go 分组为:

  1. 如果当前 model 没有密钥,则将其添加到 Map。
  2. 将当前值添加到 Map。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM