【问题标题】:JavaScript array.forEach(()) -iterate, change and return new numbers in a new arrayJavaScript array.forEach(()) - 在新数组中迭代、更改和返回新数字
【发布时间】:2017-06-17 15:28:00
【问题描述】:

我想返回一个数组,changeArray,每个元素都在“array”+2中。

我得到一个空的“changeArray”。

var array = [1, 2, 3, 4];

function changeArray(array){
  var newNums = [];
  array.forEach(function(number){
    number = number + 2;
    console.log(number);
    //return(newNums);
  });return(newNums);
}changeArray(array);

感谢大家的精彩回答。他们真的很有帮助。我应该使用 .forEach 并“返回”新数组。我同意 .map 最好,但是...非常感谢!

【问题讨论】:

  • 你从来没有把任何东西放入 newNums ......并且 return 不是一种方法

标签: javascript arrays


【解决方案1】:

Array.map 将是该工作的合适工具

var array = [1, 2, 3, 4];
    
var newNums = array.map(x => x + 2);

console.log(newNums);

代码不工作的原因是因为你不能像这样从forEach 真正返回,你必须在每次迭代中推送到数组

var array = [1, 2, 3, 4];

function changeArray(array) {
  var newNums = [];
  
  array.forEach(function(number) {
    newNums.push( number + 2 );
  });
  
  return newNums;
}

var result = changeArray(array);

console.log(result);

【讨论】:

  • 如果你解释一下为什么他的代码不起作用以及为什么forEach回调中的返回没有效果会更好。
  • 你成功了!我只是删除了您的最后两行,并调用了该函数。它返回了新数组。谢谢一百万!
  • 我不确定你说的这个答案中的两个建议中的哪一个能解决问题。但是第一个,map,显然是更好的技术。第二个用于显示您的尝试中出了什么问题以及如何解决它。但是map 显然是完成这项工作的正确工具。
  • Scott,我想我应该指出我不知道如何填充新数组。出于我的目的,这需要我使用 .forEach,第二个进行了非常小的修改。感谢您的输入。真的很感激。我是新手。
【解决方案2】:

这个任务的正确函数确实是.map()

但是你仍然可以通过一些修改来使用你的函数。

    var array = [1, 2, 3, 4];

    function changeArray(inputArray){
      var newNums = inputArray.slice();
      newNums.forEach(function(number, index){
        newNums[index] = number + 2;
      });
  return(newNums);
    }
console.log(changeArray(array));

说明

首先,您将changeArray() 编码为始终返回一个空数组。

查看var newNums = [];,然后查看return(newNums);

当您使用 forEach() 来对抗 array 变量时。

其次,你应该阅读更多关于forEach()here的信息。

如果你注意到,我使用.slice()inputArray 的值复制到newNums

确保inputArray 未被函数修改是一种很好的做法。

【讨论】:

  • 由于array 的阴影,这段代码比它应该的更令人困惑。如果该参数具有不同的名称会更容易理解......当然,正如另一个答案指出的那样,map 是这项工作的正确工具。
  • 为清晰起见更新了代码,感谢您指出@ScottSauyet
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 2016-05-29
  • 2020-04-12
  • 2014-05-30
  • 2019-11-29
  • 1970-01-01
  • 2020-07-21
  • 2020-10-23
相关资源
最近更新 更多