首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找三个字符串数组的所有可能组合,以验证所提供的slug

查找三个字符串数组的所有可能组合,以验证所提供的slug
EN

Stack Overflow用户
提问于 2020-05-05 00:41:41
回答 2查看 51关注 0票数 0

我需要生成三个字符串数组的所有可能组合(样式、颜色、房间类型)……给定这3个字符串数组:

代码语言:javascript
运行
复制
const stylesArray = ['modern'];
const colorsArray = ['blue', 'white'];
const typesArray = ['kitchen', 'living room', 'bedroom'];

输出数组应包含以下值:

代码语言:javascript
运行
复制
modern
blue
white
kitchen
living room
bedroom
modern-blue
modern-white
modern-kitchen
modern-living room
modern-bedroom
modern-blue-kitchen
modern-white-kitchen
...

以此类推。这些组合仅在给定的顺序(样式、颜色、房间类型)中有效。请注意,每个数组中只有一个或两个元素也是有效的。我找到了一些帖子,你可以将这三种情况结合起来,但不是我刚才提到的最后一个条件。

这里的目标是能够基于每个“类别”(样式、颜色、房间类型)的那些给定值来验证所提供的slug是否有效。但这些值不是硬编码的,而是从API中动态提取的(这与此无关)。

因此,上面列出的是有效的slug,但这不是:

代码语言:javascript
运行
复制
blue-modern
kitchen-blue
kitchen-modern-blue

这就是为什么我提到有效的顺序是style -> color -> type (但不是所有的值都是强制的,它可以只有一个或两个,最多三个,但总是按这个顺序)

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 01:08:10

我将创建一个有效组合数组,如下所示:

代码语言:javascript
运行
复制
const stylesArray = ['modern'];
const colorsArray = ['blue', 'white'];
const typesArray = ['kitchen', 'living room', 'bedroom'];

stylesArray.push(null);
colorsArray.push(null);
typesArray.push(null);

var combinations = [];

stylesArray.forEach(style => {
  colorsArray.forEach(color => {
    combinations.push([style, color]);
    typesArray.forEach(type => {
      combinations.push([style, color, type]);
    });
  });
});

var validSlugs = combinations.map(comb => comb.filter(el => el).join('-'));

console.log(validSlugs);

我基本上创建了一个组合数组,其中每个元素都是三个值(包括可能的null)的数组,然后将其映射到字符串。

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 01:29:22

您可以先创建a tree,然后在BFS中创建traverse

代码语言:javascript
运行
复制
const stylesArray = ["modern"];
const colorsArray = ["blue", "white"];
const typesArray = ["kitchen", "living room", "bedroom"];
const items = [
  {
    id: stylesArray[0],
    children: colorsArray.map((id) => ({
      id,
      children: typesArray,
    })),
  },
];
const traverse = (items, prefix = "", slugs = new Set()) => {
  if (Array.isArray(items)) {
    items.forEach((x) => traverse(x, prefix, slugs));
  } else if (typeof items === "object") {
    prefix && slugs.add(items.id);
    slugs.add(prefix + items.id);
    items.children.forEach((ch) => {
      traverse(ch, prefix + items.id + "-", slugs);
    });
  } else {
    items = items.replace(/\s+/, "-");
    prefix && slugs.add(items); //comment if u need induvidule kitchen, living room
    slugs.add(prefix + items);
  }
  return Array.from(slugs);
};
console.log(traverse(items).sort((x, y) => x.length - y.length));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61597271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档