这是一个复杂的场景,但我们会尽力解释。我有一个对象或数组和一个数组。现在我必须将选定模型值与映射模型进行比较,如果值(不区分大小写)与该对象匹配,则获取它的所有值并将其插入选定模型并将两者组合。希望这个例子能够清楚地说明我想要实现的目标。
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);
}
这里是Fiddle
我使用 typescript 和下划线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)
关于javascript - 在 JavaScript 中合并并创建唯一区分大小写的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59153331/