繁体   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