Мне надо поменять все буквы в строке по шаблону из массива. Начал, но не смог продолжить. Был идея перебором все буквы получить, но тогда скорость работы оставляла бы желать лучшего. В это коде я создаю переменную в массиве, в которую и будет записана новая строка:
array.forEach(function(item, i, arr) {
arr[i]["__TMP__"] =
stringTable.indexOf( item["name"].toString().charAt(0).toUpperCase() );
});
Можно ли как-то это сделать с помощью replace
?
template array:
stringTable: string[] = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z"
];
input string: Tim
outout string: 019008012
(019- t, 008- i, 012- m)
Вместо массива лучше использовать объект, в этом случае не нужен будет поиск, например
{
"A": "000",
"B": "001",
"C": "002",
"D": "003",
"E": "004",
"F": "005",
"G": "006",
"H": "007",
"I": "008",
"J": "009",
"K": "010",
"L": "011",
"M": "012",
"N": "013",
"O": "014",
"P": "015",
"Q": "016",
"R": "017",
"S": "018",
"T": "019",
"U": "020",
"V": "021",
"W": "022",
"X": "023",
"Y": "024",
"Z": "025"
}
Получение же нужной строки для замены сведется к простому получению свойства:
symbolsMap[char.toUpperCase()];
Это код можно использовать в функции, передаваемую в метод replace
var symbolsMap = {
"A": "000",
"B": "001",
"C": "002",
"D": "003",
"E": "004",
"F": "005",
"G": "006",
"H": "007",
"I": "008",
"J": "009",
"K": "010",
"L": "011",
"M": "012",
"N": "013",
"O": "014",
"P": "015",
"Q": "016",
"R": "017",
"S": "018",
"T": "019",
"U": "020",
"V": "021",
"W": "022",
"X": "023",
"Y": "024",
"Z": "025",
"Р": "-11",
"Ы": "-21",
"К": "-31"
}
var str = "Tim";
var numbers = str.replace(/./gi,$0=>symbolsMap[$0.toUpperCase()]||$0);
console.log(numbers);
var str = "рык";
var numbers = str.replace(/./gi,$0=>symbolsMap[$0.toUpperCase()]||$0);
console.log(numbers);
Если правильно понял вопрос то можно попробовать так.
function pad(num, size) {
var s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
let input = 'Tim'
let inputLower = input.toLowerCase();
let output = '';
for (let i = 0; i < inputLower.length; i++) {
output += pad(inputLower[i].charCodeAt(0) - 97, 3);
}
console.log(output);
Вот такой код вышел, используем не массив а charAt + отлавливаем ошибки если пользователь ввел не английские буквы.
document.querySelector("button").onclick = function() {
var inputText = (document.querySelector(".text-in").value).toLowerCase();
var outText = "";
if (inputText != "") {
inputText = inputText.split('');
for (var i = 0, inputTextL = inputText.length; i < inputTextL; i++) {
var num = (inputText[i].charCodeAt(0)) - 96;
if (num < 1 || num > 26) {
document.querySelector(".text-in").value = "English word, please!";
return;
}
if (num < 9) {
outText = outText + "00" + num;
} else {
outText = outText + "0" + num;
}
}
document.querySelector(".text-in").value = outText;
}
}
<input type="text" class="text-in">
<button>Зашифровать</button>
String.prototype.replaceAll = function(replacement) {
var _this = this;
replacement.forEach(function(element, index) {
var re = new RegExp(element, "gi");
_this = _this.replace(re, "000".substring(0, "000".length - index.toString().length) + index.toString());
});
return _this;
};
var originalString = "Hello Привет 007!!!";
var newString = originalString.replaceAll(['h', 'e', 'l', 'п', 'р', 'и', '!', 'в', 'е', 'т', 'o']);
console.log(originalString + " -> " + newString);
Для данного кода важно, чтобы среди символов для замены ['h', 'e', 'l', 'п', 'р', 'и', '!', 'в', 'е', 'т', 'o']
не было чисел. Если будут числа — напишите, пожалуйста, вопрос более развернуто со всеми условиями. От этого будет зависить решение.
P.S.: Если будут числа: можно сначала регулярным выражением числа заменить, а потом остальные символы. Потому что, если мы сначала в строке заменим символы, а затем начнем заменять числа — в строке как бы появятся ещё числа...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вылетает ошибка в webpack при попытке срендерить этот код:
Собственно нужно брать высоту одного блока и при загрузке документа присваивать его другомуКак это можно реализовать ?