簡體   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