He estado buscando en la web y he encontrado algunos ejemplos sobre mi problema actual, y todo parece estar abordando el mismo tema: descifrar texto. Pero no puedo encontrar nada escrito en JavaScript. Le di una oportunidad, pero estoy atascado cuando trato de convertir la cadena en una matriz.

Digamos que el alfabeto actual es

var alpabhet=[
    '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','å','ä','ö'
];

Y tengo una cadena ammj, que ingreso en la entrada. Entonces quiero poder cambiar con las teclas derecha e izquierda y ver la salida de ese cambio actual. Por lo tanto, un cambio de dos (2) daría como resultado la cadena cool. Y un cambio de 5 para la cadena åjjg también daría como resultado cool.

Entonces, mi principal preocupación es, ¿cómo puedo convertir una entrada del usuario a una matriz con javascript?

Tengo un campo de entrada: <input id="text_to_be_shifted" type="text"> y luego estoy tratando de hacer un bucle de entrada y organizarlo en una matriz

var values = {};
var inputs = document.getElementById('text_to_be_shifted');
for( var i = 0; i < inputs.length; i++ ) {
    values[inputs[i].name] = inputs[i].value;
}

Echa un vistazo a mi violín: http://jsfiddle.net/p8kqmdL1/

0
Adam 28 oct. 2017 a las 19:00

3 respuestas

La mejor respuesta

Aquí tiene un ejemplo en vivo y en funcionamiento, con un cheque para que el desplazamiento de la letra 'a' con -1 lo convierta en la última letra del alfabeto 'ö', -2 a 'ä' e.t.c. y al cambiar la última letra del alfabeto con 1 se establecerá en 'a', con 2 en 'b' e.t.c:

  var alpabhet=[
'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','å','ä','ö'
];

var values = {};
var inputs = document.getElementById('text_to_be_shifted');
for( var i = 0; i < inputs.length; i++ ) {
	values[inputs[i].name] = inputs[i].value;
}
function outputText(number){
   var newtext = [];
	 var inputtext = document.getElementById('text_to_be_shifted').value.split('');
   inputtext.forEach(letter=> {
			var ind_ofLetter = alpabhet.indexOf(letter);
		ind_ofLetter = ind_ofLetter + number;
		if (ind_ofLetter < 0){
		   ind_ofLetter = alpabhet.length + ind_ofLetter;
		}else if(ind_ofLetter > alpabhet.length-1){
		   ind_ofLetter = ind_ofLetter -  alpabhet.length;
		}
		newtext.push(alpabhet[ind_ofLetter]);
   });
   document.getElementsByClassName('output')[0].innerHTML = newtext.join('');
}

function shiftUp() {
	var currentShift = document.getElementById('currentShift');
	var number = currentShift.innerHTML;
	number++;
	currentShift.innerHTML = number;
	 outputText(number);
}

function shiftDown() {
	var currentShift = document.getElementById('currentShift');
	var number = currentShift.innerHTML;
	number--;
	currentShift.innerHTML = number;
	 outputText(number);
}

document.onkeydown = checkKey;

function checkKey(e) {

	e = e || window.event;

	if (e.keyCode == '37') {
	   console.log('left arrow')
	   shiftDown()
	}
	else if (e.keyCode == '39') {
		console.log('right arrow')
		shiftUp()
	}

}
<b>Current shift: </b><span id="currentShift">0</span>

<br><input id="text_to_be_shifted" type="text">
<div id='output' class="output"></div>
0
Roman Habibi 28 oct. 2017 a las 16:39

Solo hay una entrada, por lo que no tiene sentido recorrerla.

Para obtener una matriz, debe usar algo como:

document.getElementById('text_to_be_shifted').split("");

Luego puede usar la función de mapa para desplazar los elementos

let arr = document.getElementById('text_to_be_shifted').split("");

let shifted = arr.map((c) => alpabhet[(alpabhet.indexOf(c) + 1) % alpabhet.length]).join("");
0
user184994 28 oct. 2017 a las 16:19

En su bucle for, puede utilizar la función charAt () para obtener el carácter individual en un índice dado. Las escuelas W3 tienen una buena lección sobre esta función si es necesario: https://www.w3schools.com/ jsref / jsref_charat.asp

var inputArray = [];
var inputs = document.getElemenById('text_to_be_shifted');
for(let i = 0; i < inputs.length; i++){
     inputArray[i] = inputs.charAt(i);
}

Algo como esto debería funcionar para obtener una matriz con una sola letra en cada índice.

0
Ryan Thatcher 28 oct. 2017 a las 16:20