我是软件新手,有一段代码是数组练习的解决方案,但我不明白它为什么有效。首先,它所做的第一件事是返回您在函数中作为参数输入的字符串,那么其余的代码不应该被忽略并且不执行吗?为什么会执行?,我也不明白为什么map()方法中的箭头函数有两个参数,分别称为“word”和“index”,javascript引擎如何知道参数“word”指的是一个函数正在处理的数组内的单词是什么? (索引这个词也是一样,它怎么知道参数指的是数组的索引?)。
这是代码:
function camelize(str) {
return str
.split('-') // splits 'my-long-word' into
array ['my', 'long', 'word']
.map(
// capitalizes first letters of all array
items except the first one
// converts ['my', 'long', 'word'] into
['my', 'Long', 'Word']
(word, index) => index == 0 ? word :
word[0].toUpperCase() + word.slice(1)
)
.join(''); // joins ['my', 'Long', 'Word']
into 'myLongWord'
}
相关练习:https://javascript.info/task/camelcase
我尝试在 Google 上查找,但在搜索结果中没有找到相关答案。
让我为你分解一下。在这种情况下,注释会降低代码的可读性。删除它们。这就是你正在做的事情:
function camelize(str) {
return str.split('-').map((word, index) => index == 0 ? word :
word[0].toUpperCase() + word.slice(1)).join('');
}
return 关键字返回单个值,该值是在单个语句中使用称为“方法链接”的东西计算的。
顾名思义,方法链接“链接”多个方法,使用点运算符形成单个语句。从左侧开始,在该单个语句中执行多个操作,每个方法的返回值调用下一个方法。换句话说,每个方法都作用于前一个方法返回的值。
在这种情况下,首先调用并执行
.split()
方法。它的返回值是一个字符串数组,调用 .map()
方法,该方法循环遍历该数组。在每次迭代中,其回调函数对每个元素执行指定的操作,并通过返回将新的计算值添加到新数组中。
由于回调函数是一个箭头函数,并且箭头函数隐式返回单个表达式的结果,而不使用
return
关键字,因此回调函数将新值添加到新数组中。执行后, .map()
方法返回一个包含计算/修改值的新数组。最后,该数组调用最终的 .join()
方法,该方法使用可选分隔符(在本例中为空字符串)连接字符串数组的各个元素。
默认情况下,
.map()
方法的回调函数可以有三个参数:第一个参数是强制的,表示活动迭代中元素的值,(可选)第二个参数给出活动元素的索引,(可选)第三个引用原始数组。
这就是内置
.map()
方法的实现方式,这就是工作原理。
因此,方法链语句的结果是“驼峰化”字符串,这是
camelize
函数的 return
关键字返回的。