我如何在此 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);
}
这是我正在尝试做的事情:我正在使用 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);
}