JS Split Varables - PullRequest
       13

JS Split Varables

0 голосов
/ 15 февраля 2019

У меня есть строка типа "iyxnhel2jeh", и я хочу, чтобы для каждого 2 байта я хотел разделить их на одну переменную.

var string = "iyxnhel2jehe";
var final = "";

while (/*String still has bits*/) {
    switch (/*Two byte of string*/) {
        case "iy":
            final += "x";
        break;
        case "xn":
            final += "o";
        break;
        case "he":
            final += "g";
        break;
        case "l2":
            final += "k";
        break;
        case "je":
            final += "e";
        break;
        default:
            final += "none"
    }
}

Какой лучший способ вырезать эту строку?

Ответы [ 4 ]

0 голосов
/ 15 февраля 2019

Вместо того, чтобы пытаться использовать символы и проверять, остались ли еще какие-либо, попробуйте сначала разбить строку на 2-символьные куски и выполнить цикл по массиву:

const s = "iyxnhel2jehe";
let final = "";

const t = s.split('');
const segments = t.map((e, i) => i % 2 === 0 ?
                                 e + (t.length - 1 >= i + 1 ? t[i + 1] : '') :
                                 null)
                  .filter(x => x != null);

segments.forEach(sg => {
    console.log(sg);
    switch (sg) {
        case "iy":
            final += "x";
        break;
        case "xn":
            final += "o";
        break;
        case "he":
            final += "g";
        break;
        case "l2":
            final += "k";
        break;
        case "je":
            final += "e";
        break;
        default:
            final += "none"
    }
});

console.log(final);
0 голосов
/ 15 февраля 2019

var string = "iyxnhel2jehe";
var final = "";
var offset = 0;
while (offset < string.length) {
	switch (string.slice(offset, offset + 2)) {
		case "iy":
			final += "x";
			break;
		case "xn":
			final += "o";
			break;
		case "he":
			final += "g";
			break;
		case "l2":
			final += "k";
			break;
		case "je":
			final += "e";
			break;
		default:
			final += "none"
	}
	offset += 2;
}
console.log(final);
0 голосов
/ 15 февраля 2019

Я не уверен в лучшем способе, но следующее будет делать то, что вы хотите ...

var string = "iyxnhel2jehe";
var final = "";

for (var i = 0; i < string.length; i+=2) {
  switch (string.substr(i,2)) {
        case "iy":
            final += "x";
        break;
        case "xn":
            final += "o";
        break;
        case "he":
            final += "g";
        break;
        case "l2":
            final += "k";
        break;
        case "je":
            final += "e";
        break;
        default:
            final += "none"
   }
}
console.log(final);
0 голосов
/ 15 февраля 2019

Вы можете использовать регулярное выражение, чтобы разбить строку на части по 2 буквы, сопоставить их с символами из оператора switch и объединить массив обратно, однако оптимальный способ сделать это - избавиться от оператора switch и вместо этого использовать эти последовательностисимволы как ключи объекта.

var string = "iyxnhel2jehe";
var final = string.match(/.{1,2}/g).map(twoletters => {
    return {
        "iy": "x",
        "xn": "o",
        "he": "g",
        "l2": "k",
        "je": "e"
    }[twoletters] || "none";
}).join("");
console.log(final)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...