Я хочу знать все комбинации для буквенно-цифровых номерных знаков Коста-Рики, формат этих номерных знаков - 3 согласных тире и еще 3 цифры (xxx-xxx)
Я уже сделал несколько выводов номерных знаков, но я не знаю, хорошо ли то, что я сделал.
var letra = "";
var numLetra = 0;
var letras = ["B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z"];
var tempPlaca = [];
var placas = [];
var placa = "";
function getRndInteger() {
num = Math.floor(Math.random() * (9 - 0 + 1)) + 0;
}
function getRndLetra() {
numLetra = Math.floor(Math.random() * (21 - 0 + 1)) + 0;
}
generatePlaca();
function generatePlaca() {
// Genera las letras
for (var u = 0; u < 3; u++) {
getRndLetra();
letra = letras[numLetra];
tempPlaca.push(letra);
letra = "";
}
tempPlaca.push("-");
// Genera los numeros
for (var i = 0; i < 3; i++) {
getRndInteger();
tempPlaca.push(num);
}
placa = tempPlaca.join("");
if (findInArray(placas, placa) == false) {
placas.push(placa);
tempPlaca = [];
placa = "";
generatePlaca();
}
}
console.info(JSON.stringify(placas));
function findInArray(ar, val) {
for (var i = 0, len = ar.length; i < len; i++) {
if (ar[i] === val) {
return true;
}
}
return false;
}
Мой вывод:
["GCT-381","BYG-097","KMV-305","PRZ-046","HFC-147","LQC-268","MZL-631","NVH-843"....
И я не знаю, почему в некоторых случаях номерной знак имеет неправильный формат, например:
"PB-557","JT-536"
Вы можете взять длину массива/строки и умножить на нее.
Я изменил массив на строку, которая работает для одной буквы.
var letra = "";
var numLetra = 0;
var letras = "BCDFGHJKLMNPQRSTVWXYZ";
var tempPlaca = [];
var placas = [];
var placa = "";
function getRndInteger() {
num = Math.floor(Math.random() * 10);
}
function getRndLetra() {
numLetra = Math.floor(Math.random() * letras.length);
}
generatePlaca();
function generatePlaca() {
// Genera las letras
for (var u = 0; u < 3; u++) {
getRndLetra();
letra = letras[numLetra];
tempPlaca.push(letra);
letra = "";
}
tempPlaca.push("-");
// Genera los numeros
for (var i = 0; i < 3; i++) {
getRndInteger();
tempPlaca.push(num);
}
placa = tempPlaca.join("");
if (findInArray(placas, placa) == false) {
placas.push(placa);
tempPlaca = [];
placa = "";
generatePlaca();
}
}
console.info(JSON.stringify(placas));
function findInArray(ar, val) {
for (var i = 0, len = ar.length; i < len; i++) {
if (ar[i] === val) {
return true;
}
}
return false;
}
Потому что ваш буквенный случайный индекс неверен. Это должно быть только от 0 до 20, так как размер вашего массива равен 21;
Измените свою функцию getRndLetra
на это:
function getRndLetra() {
numLetra = Math.floor(Math.random() * letras.length);
}
Проблема: когда random возвращает 21, вы получаете letras[21]
, что равно undefined
, поэтому иногда кажется, что в нем отсутствует 1 буква.