我如何在此 for 循环中包含 "two characters",无论是两个数字、两个字母还是它们的组合?

How do I include "two characters", whether its two numbers, or two letters, or a combination of them in this for loop?

这是我正在尝试做的事情:我正在使用 google 地图 API 创建一个带有一堆不同标记的地图,并且在每个标记上,我想要一个字母。

我设置了所有标记,但我有 31 个标记。字母表中只有 26 个字母,所以一旦它碰到 Z,它就会回到 A。另一个解决方案是弄清楚如何使用数字,但是在我得到 9 之后,我不能做 10 —— 因为 for循环一次只切掉一个字符。

这是我的代码:

// These are the labels for the markers
const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
let labelIndex = 0;
for (count = 0; count < locations.length; count++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[count][1], locations[count][2]),


// THIS IS THE LINE IM TALKING ABOUT vvvvvvvvvvvvv

label: labels[labelIndex++ % labels.length],

// THIS IS THE LINE IM TALKING ABOUT ^^^^^^^^^^^^^


map: map,
});

如您所见,我也希望能够使用两位数 -- 但在当前的设置下,我无法做到这一点。我希望这些信息足够了!

如果您只需要超出 A-Z 但仍在处理固定的最大数量的标签,则可以将标签更改为有效标签数组。如果您需要无限数量的标签,我们需要采用不同的方法,除非您通过评论确认这就是您所需要的,否则我不会在此处尝试。

至于固定数量,你可以指定每一个:

const labels = ["A", "B", "C", .... "Z", "AA", "AB", "AC", ...]

等等

如果您愿意,可以生成 lot 标签,但数量仍然固定。下面是生成 702 个标签的示例:

const __labels = Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
const labels = __labels.concat(__labels.map(c1 => __labels.map(c2 => c1+c2)).flat())

这也是一种可能的解决方案,您可以通过增加 label 的大小来增加不同 label 的数量。

这里我们使用 Set 来确保创建的 label 是唯一的

Patrick 给出的解决方案也很优雅。

const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

let set = new Set();

function randomString() {
  return (
    labels[Math.floor(Math.random() * labels.length)] +
    labels[Math.floor(Math.random() * labels.length)]
  );
}

function generateRandomLabel() {
  let label = randomString();
  while (!set.add(label)) {
    label = randomString();
  }
  return label;
}

for (let i = 0; i < 31; i++) {
  let label = generateRandomLabel();
  console.log(label);
}