【发布时间】:2021-09-30 22:17:30
【问题描述】:
我刚刚尝试解决有关代码战的任务。
问题是编写一个函数,将字符串中大于或等于 5 的每个单词反转。
当我尝试使用 forEach 时,在我使用 map 之前它不会更改元素。
根据MDN页面,
forEach() 不会改变调用它的数组。 (不过,callbackFn 可能会这样做)
所以我期待数组发生变异,因为我向它传递了一个回调函数。
function spinWords(string){
let a = string.split(" ");
// console.log(a);
a.forEach(el => {
if (el.length >= 5) {
let reverseSting = el.split("").reverse().join("");
console.log(reverseSting);
return reverseSting;
}
else {
//
return el;
}
})
console.log(a);
return a.join(" ");
}
function spinWords(string){
let a = string.split(" ");
// console.log(a);
a = a.map(el => {
if (el.length >= 5) {
let reverseSting = el.split("").reverse().join("");
console.log(reverseSting);
return reverseSting;
}
else {
//
return el;
}
})
console.log(a);
return a.join(" ");
}
【问题讨论】:
-
"所以我期待数组发生变异,因为我向它传递了一个回调函数。"你为什么会这样?回调函数不会导致任何突变。 a
returnin aforEachdo anything at all 也与数组无关。 -
当建议回调可以改变数组时,这意味着回调会显式地为数组条目分配一个新值。在
forEach回调中返回值没有任何意义。 -
@VLAZ 所以我不能用 forEach 改变数组
-
@lawalolawale 没有一个不会导致任何突变的回调函数,没有。
-
@VLAZ 但我可以在 map 中使用 return 来修改元素并将其存储在新数组中,对吗?
标签: javascript arrays