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

时间:2021-01-12 11:54:41

标签: javascript arrays 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(' '));

2 个答案:

答案 0 :(得分:0)

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(' '));

答案 1 :(得分:0)

如果您在 .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(' '));
相关问题