簡體   English   中英

有人可以解釋 Javascript 中 replace() 方法的這種特殊用法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM