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