繁体   English   中英

循环通过两个 arrays 和 Javascript 中的匹配元件

[英]Cycling through two arrays and matching elements in Javascript

我无法解决 JavaScript 中的数组匹配问题。

我有两个 arrays:

array1 = ["a", "b", "c", "d", "e"];
array2 = ["t", "u", "v", "w", "x"];

我想要实现的是一个循环,它遍历每个数组并返回一个对象数组,这些对象代表遵循模式的匹配组:

1 to 1
1 to 1,2
1,2 to 1
1,2 to 1,2
1,2,3 to 1
1,2,3 to 1,2
1,2,3,4 to 1
1,2,3,4 to 1,2 

然后,一旦循环结束,就升级到第二个字符并继续进行。 因此对于上述两个 arrays 的结果将是:

result = [
{1_1: "a;t", 1_12: "a;tu", 12_1: "ab;t", 12_12: "ab;tu", 123_1: "abc;t", 123_12: "abc;tu", 1234_1: "abcd;t", 1234_12: "abcd;tu"},
{1_1: "b;u", 1_12: "b;uv", 12_1: "bc;u", 12_12: "bc;uv", 123_1: "bcd;u", 123_12: "bcd;uv", 1234_1: "bcde;u", 1234_12: "bcde;uv"},
...and so on
];

arrays 没有主要限制,但它们很可能在 5 到 12 个字符长的区域内,尽管长度的外部限制短至 1 和长至 30。如果数组短于 4,则当它到达它可以的过程结束时它会停止。 例如:

array1 = ["a"];
array2 = ["b"];
result = [{1_1: "a;b"}];

我假设其中隐藏着一个有趣的递归游戏,但我什至不知道如何解决这个问题,更不用说以某种方式让我的谷歌搜索有效了。 非常感谢您在入门方面提供的任何帮助。

编辑以回应评论:我正在寻找的具体是我可以搜索以帮助我入门的术语或可以帮助我开始解决此问题的过程的伪代码。 谢谢。

唉排列对我来说来得太晚了。 虽然看起来我有点朝那个方向走。 我一直在为此苦苦挣扎,直到我放弃并决定从本质上强行给出答案,这就是我想出的。

我绝对肯定这可以大大简化,但是在这一天我没有精神能力去那里。 有时你只需要强迫它。 这就是我想出的:

const matchArrays = (array1: string[], array2: string[]): string[] => {

  let a1List: string[] = [];
  let resultList: string[] = [];
  let count: number = 4;
  (array1.length < 4) && (count = array1.length);

  for (let i = 0; i < array1.length; i++) {
    a1List.push(array1[i]);
    array1[i + 1] !== undefined && a1List.push(array1[i] + array1[i + 1]);
    array1[i + 2] !== undefined && a1List.push(array1[i] + array1[i + 1] + array1[i + 2]);
    array1[i + 3] !== undefined && a1List.push(array1[i] + array1[i + 1] + array1[i + 2] + array1[i + 3]);
  }

  for (let i = 0; i < a1List.length; i++) {
    resultList.push(a1List[i] + ";" + array2[Math.floor(i / count)]);
    resultList.push(a1List[i] + ";" + array2[Math.floor(i / count)] + array2[Math.floor(i / count) + 1]);
  }

  return resultList;
};

感谢任何停下来阅读本文的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM