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

标签 javascript angular typescript underscore.js

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

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/

相关文章:

Angular 2+ - 动态设置基本 href

angular - 使用路由在 Angular 6 中打开新的浏览器窗口

typescript - 使用 TypeScript 运行 Quill 编辑器

angular - 使用不同的构造函数以 Angular 继承两个组件

javascript - 解构es6但传递动态变量

Angular 4.一系列http请求被取消

javascript - 如何使用 html、javascript 和 php 通过电子邮件 ID 发送 pdf 文件

reactjs - React+Redux+ typescript : Error when trying to instantiate connect-wrapped component: Type {} is not assignable to

javascript - 如何使 Request.JSON 跨域工作(Mootools)?

javascript - 从javascript数组获取随机值并将其打印为字符串