JavaScript - Ayuda con esta funcion

 
Vista:
sin imagen de perfil

Ayuda con esta funcion

Publicado por Luis (10 intervenciones) el 24/05/2022 18:52:46
Hola. Tengo este codigo:

for (var f=0;f<3;f++){
var patron = ["viendas unifamiliares de distintos","#muro#","<anio>"];
var nuevoValor = ["casitas diferentes","0.084","<AÑO>"];
var nuevoTexto = textFromFileLoaded.replace(patron[f], nuevoValor[f]);
}


la idea es recorrer el array patron e ir sustituyendo cada uno de sus elementos por su analogo en el array nuevoValor, de un texto.... la cosa que tal como esta solo me cambia la ultima palabra (osea <anio> por <AÑO>) pero los otros no, como lo puedo hacer para que la variable nuevoTexto contenga todos los cambios y no solo el ultimo....

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Ayuda con esta funcion

Publicado por Ivan (118 intervenciones) el 24/05/2022 20:23:49
Hola,

no acabo de entender tu pregunta pero si simplemente quieres copiar las posiciones de los Array es tan fácil como:

1
for (var f=0;f<3;f++) patron[f] = nuevoValor[f];

Pero seguramente quieres hacer algo más que no dices ...

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con esta funcion

Publicado por Luis (10 intervenciones) el 25/05/2022 10:46:44
es algo mas complejo, se trata en un texto de ir cambiando la posicion de patron.X por nuevoValor.X , en este ejemplo el array es de 3 valores, 0,1,2 .... asi que por ejemplo en el 0 tenemos que cambiar "viendas unifamiliares de distintos" por "casitas diferentes", de un texto., y asi sucesivamente con el 1 y con el 2 (de ahi el bucle for) pero he probado muchas cosas y solo cambia el ultimo valor del array, osea el 2 . No se como hacerlo apra que vaya guardando todos los cambios y obtenga al final una variable, que no tiene por que ser nuevoTexto, con los 3 cambois realizados.

Espero haberme explicado mejor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con esta funcion

Publicado por Luis (10 intervenciones) el 25/05/2022 11:28:04
(No se como editar en el foro el mensaje anterior para añadir esto, lo añado en una nueva respuesta:)


Por si ayuda lo que quiero hacer que en el ejemplo es sustituir 3 cadenas de caracteres seran para muchisismas por eso implementar una funcion tipo for para que las haga en bucle los cambios. ... si lo hago como muestreo a continuacion sí hace los que quiero (cambiar todas las cadenas de caracteres):

function loadFileAsText()
{
var fileToLoad = document.getElementById("fileToLoad").files[0];

var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent)
{

var textFromFileLoaded = fileLoadedEvent.target.result;
var patron = ["viendas unifamiliares de distintos","#muro#","<anio>"];
var nuevoValor = ["casitas diferentes","0.084","<AÑO>"];


var f = 0;
var NuevoTex=textFromFileLoaded.replace(patron[f], nuevoValor[f]);
f++;
var FiN = NuevoTex.replace(patron[f], nuevoValor[f]);
f++;
var FiN2 = FiN.replace(patron[f], nuevoValor[f]);






document.getElementById("inputTextToSave").value = FiN2;
document.getElementById("inputOriginalText").value = textFromFileLoaded;
};
fileReader.readAsText(fileToLoad, "UTF-8");





aqui amplio un poco mas el codigo en donde esta lo que quiero hacer... espero que sirva ... gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Ayuda con esta funcion

Publicado por Ivan (118 intervenciones) el 25/05/2022 12:35:16
Hola,

mucho mejor esta explicación :)
Por lo que entiendo lees un texto de una fuente externa y quieres subsitituir las coincidencias de patron por sus homólogos nuevoValor.

Entonces ibas bién encaminado pero ya se sabe, en programación un matíz marca la diferéncia ...

1
2
3
4
5
6
7
<script>
  var patron = ["viendas unifamiliares de distintos","#muro#","<anio>"];
  var nuevoValor = ["casitas diferentes","0.084","<AÑO>"];
  // var texto es la fuente externa de texto donde queremos substituir los valores de patron por nuevoValor
  var texto = "viendas unifamiliares de distintos, #muro#, <anio>, otros datos, diversos que me invento, viendas unifamiliares de distintos, #muro#, <anio>, viendas unifamiliares de distintos, #muro#, <anio>";
  for (var f=0;f<3;f++) texto = texto.replaceAll(patron[f], nuevoValor[f]);
</script>

replaceAll cambia todas las coincidencias, si miras la documentación replace sólo cambia algunas o todas ... curioso ...

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con esta funcion

Publicado por Luis (10 intervenciones) el 25/05/2022 13:29:10
Gracias por contestar, lo he probado lo que tu dices quedandome asi:

var textFromFileLoaded = fileLoadedEvent.target.result;
var patron = ["viendas unifamiliares de distintos","#muro#","<anio>"];
var nuevoValor = ["casitas diferentes","0.084","<AÑO>"];


for (var f=0;f<3;f++) texto = textFromFileLoaded.replaceAll(patron[f], nuevoValor[f]);






document.getElementById("inputTextToSave").value = texto;
document.getElementById("inputOriginalText").value = textFromFileLoaded;



pero lamentablemente sige pasando lo mismo, en el texto solo me cambia <ANIO> por <AÑO> , pero los dos primeros valores de los arrays no los cambia.... alguna idea mas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Ayuda con esta funcion

Publicado por Ivan (118 intervenciones) el 25/05/2022 21:22:17
Hola,

el problema es que que tu linea:

1
for (var f=0;f<3;f++) texto = textFromFileLoaded.replaceAll(patron[f], nuevoValor[f]);

debería ser:

1
for (var f=0;f<3;f++) textFromFileLoaded = textFromFileLoaded.replaceAll(patron[f], nuevoValor[f]);

El truco del almendruco es aplicar los cambios a la misma variable textFromFileLoaded, que al fin y al cabo es sobre la que quieres aplicar los cambios.

Si quieres guardar un antes y un después, pues antes del bucle haces:

1
var textoAntes = textFromFileLoaded;

y después del bucle textFromFileLoaded tiene los cambios

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con esta funcion

Publicado por Luis (10 intervenciones) el 27/05/2022 11:26:15
Pues sí tienes toda la razon del mundo, ahora asi que hace lo que queria que hiciera:

var textFromFileLoaded = fileLoadedEvent.target.result;
var patron = ["viendas unifamiliares de distintos","#muro#","<anio>"];
var nuevoValor = ["casitas diferentes","0.084","<AÑO>"];



var textoAntes = textFromFileLoaded;

for (var f=0;f<3;f++) textFromFileLoaded = textFromFileLoaded.replaceAll(patron[f], nuevoValor[f]);







document.getElementById("inputTextToSave").value = textFromFileLoaded;
document.getElementById("inputOriginalText").value = textoAntes;



MUCHISIMAS GRACIAS!!! hasta la proxima !!

saludos!


EDITO: nueva version mejorada!!:

var textFromFileLoaded = fileLoadedEvent.target.result;
var patron = ["viendas unifamiliares de distintos","#muro#","<anio>",'"bueno"'];
var nuevoValor = ["casitas diferentes","0.084","<AÑO>",'"malo"'];
var NumeroDeCambios = patron.length;


var textoAntes = textFromFileLoaded;

for (var f=0;f<NumeroDeCambios;f++) textFromFileLoaded = textFromFileLoaded.replaceAll(patron[f], nuevoValor[f]);







document.getElementById("inputTextToSave").value = textFromFileLoaded;
document.getElementById("inputOriginalText").value = textoAntes;



Por cierto, por que la funcion for no necesita las llaves {} ???

gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ivan

Ayuda con esta funcion

Publicado por Ivan (118 intervenciones) el 27/05/2022 13:05:40
Hola,

me alegro que te funcione ;)

Respecto a tu pregunta ... pues simplemente for es un bucle i su sintaxis es así.
Cuando se utilizan {} en JavaScript normalmente estamos hablando de Objetos y los [] normalmente se atribuye a Arrays, pero su iteración puede ser diferente aunque myVar['Campo1'] es un campo de objeto idéntico a myVar.Campo1 y myVar[i] es el campo "i" en un Array.

1
2
var myObject = {}; // Declara un objeto
var myArray = []; // Declara un Array

La forma de iterar entre Arrays y Objetos es diferente, aunque la instrucción empiece por for, forEach, for in, es muy aconsejable que busques en https://developer.mozilla.org/es/docs/Web/JavaScript cuando tengas que trabajar un tema.

JavaScript es un lenguaje muy flexible y poco typado, esto es muy bueno y a la vez complicado o peligroso si no se programa con cuidado. A mi desde luego a veces me fascina y otras prefiero que sea más estricto, en fin ... divertido jajaja

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Ivan

Ayuda con esta funcion

Publicado por Ivan (118 intervenciones) el 27/05/2022 18:39:29
Hola de nuevo!

antes me he liado explicando las llaves y objetos, pero en el bucle for, si sólo escribes una linea, no hacen falta las llaves.
También ocurre lo mismo con los if else ...

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar