2011-02-26 33 views
2

,所以我有這個數組:的JavaScript得到數組名

var utf = Array(
    a: Array('á','à','ã','Á','À','Ã'), 
    e: Array('é','ê','É','È'), 
    i: Array('í','Í'), 
    o: Array('ó','õ','Ó','Õ'), 
    u: Array('ú','Ú'), 
    c: Array('ç','Ç') 
); 

我要像循環運行:

for(i = 0; i < utf.length; i++){ 
    for (j = 0; j < utf[i].length; j++){ 
     mystring.replace(utf[i][j], <utf[i][arrayname]>); 
    } 
} 

這可能嗎?怎麼樣?你會以不同的方式做到這一點?怎麼樣?

非常感謝您

回答

0

它使用關聯數組是可能的(即對象),而不是一個正常的陣列。

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); 
     } 
    } 
2

Javascript中的數組僅支持整數索引。使用對象。我還建議使用JSON作爲最可讀的,最簡單的方法如何創建新的數組和對象:

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] 
} 
5
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; 
} 

它很慢。如果你的瀏覽器編譯的正則表達式(最喜歡的新的做),最快的解決方案可能是每個字符使用正則表達式的一個:

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; 
} 
+0

注意'replace'只會取代指定字符/字符串的第一個實例。 – 2011-02-26 16:42:12

+0

哦耶也可以解決這個錯誤,因爲我已經解決了替換返回它的結果而不是像OP似乎假設那樣改變輸入的事實。 – 2011-02-26 16:47:27

0
// 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]); 
    } 
}