so i have this array:
var utf = Array(
a: Array('á','à','ã','Á','À','Ã'),
e: Array('é','ê','É','È'),
i: Array('í','Í'),
o: Array('ó','õ','Ó','Õ'),
u: Array('ú','Ú'),
c: Array('ç','Ç')
);
I want to run a for loop like:
for(i = 0; i < utf.length; i++){
for (j = 0; j < utf[i].length; j++){
mystring.replace(utf[i][j], <utf[i][arrayname]>);
}
}
is this possible? how? would you do this in a different way? how?
Thank you very much
Lightness Races in Orbit
387k77 gold badges672 silver badges1.1k bronze badges
asked Feb 26, 2011 at 16:27
Pastilhas
11.7k26 gold badges72 silver badges130 bronze badges
4 Answers 4
function doReplace(mystring)
{
var utf = {
a: ['á','à','ã','Á','À','Ã'],
e: ['é','ê','É','È'],
i: ['í','Í'],
o: ['ó','õ','Ó','Õ'],
u: ['ú','Ú'],
c: ['ç','Ç']
};
for(var c in utf)
{
var charArray = utf[c];
for (var j = 0; j < charArray.length; j++)
{
mystring= mystring.replace(new RegExp(charArray[j], "g"), c);
}
}
return mystring;
}
It's slow. The fastest solution if your browser compile regexes (like most new ones do) might be to use one regex per character :
var utf = {
a: ['á','à','ã','Á','À','Ã'],
e: ['é','ê','É','È'],
i: ['í','Í'],
o: ['ó','õ','Ó','Õ'],
u: ['ú','Ú'],
c: ['ç','Ç']
};
var utfRegexes = {};
// Sadly javascript isn't C# so something that could be done in two lines
// of LINQ need to be unrolled.
for(var c in utf)
{
console.log("in " + c);
var chars = "[";
for (var j = 0; j < utf[c].length; j++)
{
chars += utf[c][j];
}
chars += "]";
utfRegexes[c] = new RegExp(chars, "g");
}
function doReplaceRegex(mystring)
{
for(var c in utfRegexes)
{
mystring = mystring.replace(utfRegexes[c], c);
}
return mystring;
}
answered Feb 26, 2011 at 16:39
Julien Roncaglia
18k4 gold badges61 silver badges78 bronze badges
Sign up to request clarification or add additional context in comments.
2 Comments
Crescent Fresh
Note that
replace will only replace the first instance of the given char/string.Julien Roncaglia
Oh yeah could also solve this bug as I already solved the fact that replace return it's result instead of changing the input as OP seemed to assume.
Arrays in Javascript support only integer indexes. Use object. I also recommend using JSON as the most readable and simplest way how to create new arrays and objects:
var utf = {
a: ['á','à','ã','Á','À','Ã'],
e: ['é','ê','É','È']
//etc
};
for (var i in utf)
{
//In the i variable, you'll find name of array of chars: a, e, i, o, u, c...
//The array of chars can be found in utf[i]
}
answered Feb 26, 2011 at 16:38
duri
15.4k3 gold badges49 silver badges51 bronze badges
Comments
It is possible using an associative array (i.e. object) instead of a normal array.
var utf = {
'a': ['á','à','ã','Á','À','Ã'],
'e': ['é','ê','É','È'],
'i': ['í','Í'],
'o': ['ó','õ','Ó','Õ'],
'u': ['ú','Ú'],
'c': ['ç','Ç']
}
var mystring = 'abgvÁÓÚ';
for(var i in utf){
for(var j = 0; j < utf[i].length; j++){
mystring.replace(utf[i][j], i);
}
}
answered Feb 26, 2011 at 16:43
Peter Olson
144k49 gold badges210 silver badges250 bronze badges
Comments
// Just a semantic reformat, lacks speed improvements
var utf = Array(
Array('a', 'á','à','ã','Á','À','Ã'),
Array('e', 'é','ê','É','È'),
Array('i', 'í','Í'),
Array('o', 'ó','õ','Ó','Õ'),
Array('u', 'ú','Ú'),
Array('c', 'ç','Ç')
);
for(i = 0; i < utf.length; i++){
for j = 1; j < utf[i].length; j++){
mystring.replace(utf[i][j], utf[i][0]);
}
}
answered Feb 26, 2011 at 16:44
Torsten Becker
4,3132 gold badges24 silver badges22 bronze badges
Comments
lang-js