微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.forEach() 中的更改没有效果?

如何解决.forEach() 中的更改没有效果?

所以让我先介绍一下我在 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(' '));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。