问题描述
所以让我先介绍一下我在 Codecademy 中进行编码的事实,所以也许它只是很奇怪。
我正在尝试从数组 (dupBW) 中删除所有标点符号并将所有内容设置为小写。
我的代码在 forEach 中运行良好,console.log 显示了这一点。但是当我最后注销时 dupBW 不受影响。
感谢您的帮助。
dupBW.forEach(dupWord => {
if(puncArray.includes(dupWord[dupWord.length-1])) {
dupWord = dupWord.slice(0,dupWord.length-1);
dupWord = dupWord.toLowerCase();
console.log(dupWord);
}
});
console.log(dupBW.join(' '));
解决方法
把forEach
改成map
,最后返回dupWord
,就可以了;通过将数组分配给新返回的数组。 Array.prototype.map
返回一个包含回调返回值的新数组。
dupBW = dupBW.map(dupWord => {
if(puncArray.includes(dupWord[dupWord.length-1])) {
dupWord = dupWord.slice(0,dupWord.length-1);
dupWord = dupWord.toLowerCase();
console.log(dupWord);
}
return dupWord;
});
console.log(dupBW.join(' '));
,
如果您在 .forEach() 的文档中看到,您会发现 forEach 不会修改它被调用的数组。为此,您可以使用常规的 for 循环或 map 或 reduce。
您可以执行以下操作,
let res = dupBW.map(dupWord => {
if(puncArray.includes(dupWord[dupWord.length-1])) {
dupWord = dupWord.slice(0,dupWord.length-1);
dupWord = dupWord.toLowerCase();
console.log(dupWord);
}
return dupWord;
});
console.log(res.join(' '));