[英]Can someone explain this particular use of the replace() method in Javascript?
我正在學習 Javascript 並在 web 上遇到了一個練習問題,我能夠解決但與給定的解決方案不匹配,后者更緊湊。 下面的代碼只取一個單詞,反轉字母,然后用數字替換 a、e、o、u。 我做了很多研究,但似乎無法理解 replace() 方法的以下箭頭 function 參數如何工作:
match => replaceChars[match]
這是完整的代碼:
var x = "orange";
var y = x.split("").reverse().join("");
var replaceChars={ "a": 0 , "e": 6, "o": 2, "u": 9 };
var t = y.replace(/[aeou]/g,match => replaceChars[match]);
console.log(t)
編輯:感謝您的快速回答。 我現在明白了。 我只需要像這樣寫出來就可以完全理解:
var x = "orange";
var y = x.split("").reverse().join("");
var replaceChars={ "a": 0 , "e": 6, "o": 2, "u": 9 };
function matchFunc(match){
x = replaceChars[match];
return x;}
console.log (replaceChars["a"])
var t = y.replace(/[aeou]/g,matchFunc);
console.log(t)
這部分稱為箭頭 function,它的定義如下:
arguments =>
{
block of code
}
箭頭函數是在 ES6 中添加的,您可以將它們用作回調函數(而不是使用標准的匿名函數)。 在這個特定的例子中,當一個字符是正則表達式的一部分時,箭頭 function 執行替換是由 object 替換字符中的等效數字。
String.prototype.replace
接受第二個參數,它可以是每個匹配的匹配項被替換的字符串,也可以是每個匹配項的匹配項調用的 function,其返回值用於替換該匹配項。
在您的示例中, replaceChars
object 為每個可以匹配的字符提供替換。
這可能會更清楚:
var y = "abceOou".split("").reverse().join(""); var replaceChars={ "a": 0, "e": 6, "o": 2, "u": 9 }; var t = y.replace(/[aeou]/g,match=>{ console.log(`Replacing ${match} with ${replaceChars[match]}`); return replaceChars[match]; }); console.log(t)
/g
是一個正則表達式,它選擇“aeou”中每個字符的每個實例(而不是只選擇“aeou”的第一次出現)並將它們替換為matchFunc => replaceChars[matchFunc]
的值。
例如,沒有/g
:
var string = "123 example 123 string 123";
string.replace("123", "Test"); // Replaces first instance of string "123"
將打印:“測試示例 123 字符串 123”
並與/g
:
var string = "123 example 123 string 123";
string.replace(/[123]/g, "Test"); // Replaces every separate character with 1, 2 or 3.
將打印:“TestTestTest 示例 TestTestTest 字符串 TestTestTest”
這是因為它選擇了“1”、“2”和“3”的每個實例,並將其替換為“Test”。
首先,您的問題有點令人困惑,因此下次在發布之前嘗試校對您的問題。
假設你有 function
const replaceChars={ "a": 0 , "e": 6, "o": 2, "u": 9 };
const replace = letter => replaceChars[letter]
(為了清楚起見,我更改了變量名稱)。 這與
var replaceChars={ "a": 0 , "e": 6, "o": 2, "u": 9 };
function replace(letter) {
return replaceChars[letter]
}
但更簡潔。
嘗試在控制台中調用 function :
replace('a') // returns 0
replace('e') // returns 6
為y.replace(...)
中的每個匹配字母調用 function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.