[英]javascript unique string array case insensitive but keep one case sensitive result
[英]Merge and create an unique case sensitive array in javascript
這是一個復雜的場景,但會盡量解釋。 我有一個對象或數組和一個數組。 現在我必須將 selectedmodel 值與映射模型進行比較,如果值(不區分大小寫)與該對象匹配,則獲取它的所有值並將其推入所選模型並將兩者結合起來。 希望這個例子能說明我想要達到的目標。
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] };
var selectedModels = ['CC605', 'tc76'];
var desiredOutput = ["CC605", "tc76", "cc605", "cC605"];
我已經寫了一個解決方案來實現它,但我需要一個更好的代碼在性能方面。 這是解決方案:
function combineModelCases(selectedModels) {
const modelCases = [];
selectedModels.forEach(elm => {
const existingModels = mappedModels[elm.toUpperCase()];
if (existingModels) {
for (const key of existingModels) {
if (elm.toUpperCase() !== key) {
modelCases.push(key);
}
}
}
});
return selectedModels.concat(modelCases);
}
這是小提琴
我正在使用打字稿和下划線 js 作為您的參考。 任何幫助都會非常有幫助。
您可以使用flatMap
為selectedModels
每個鍵獲取扁平化的值數組。 然后,創建一個Set
以獲得唯一的集合模型。 使用Array.from()
將集合轉換為數組。
const mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] }, selectedModels = ['CC605', 'tc76']; const models = selectedModels.flatMap(m => mappedModels[m] || []), unique = Array.from(new Set([...selectedModels, ...models])); console.log(unique)
您可以執行以下操作:
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] }; var selectedModels = ['CC605', 'tc76']; var desiredOutput; function combineModelCases(selectedValue){ if(mappedModels.hasOwnProperty(selectedValue)){ desiredOutput = [... new Set([...mappedModels[selectedValue], ...selectedModels])] return desiredOutput; } } console.log(combineModelCases('CC605'));
這是工作演示: https : //jsfiddle.net/wzo4d6uy/2/ :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.