在 javascript 中合并并创建一个区分大小写的唯一数组

Merge and create an unique case sensitive array in javascript

这是一个复杂的场景,但会尽可能多地解释。我有一个对象或数组和一个数组。现在我必须将选定模型值与映射模型进行比较,如果值(不区分大小写)与该对象匹配,则获取它的所有值并将其推送到选定模型中并将两者结合起来。希望这个例子能清楚我想要达到的目标。

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

我正在使用打字稿和下划线 js 供您参考。任何帮助都会非常有帮助。

您可以执行以下操作:

    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/

您可以使用 flatMap to get a flattened array of values for each key in selectedModels. Then, create a Set to get a unique collection models. Use 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)