forEach返回未定义-如何改为返回数组?

时间:2019-05-18 12:22:13

标签: javascript arrays ecmascript-6

下面给出的代码是我尝试使用箭头函数修改数组的代码,但是在运行时,它返回undefined的值,因为输出可以有人提出建议

var modifyArray = (nums) => {
     return nums.forEach(function (element) {
          (element % 2 == 0) ? element *= 2 : element *= 3;
     })
}
console.log(modifyArray([1,2,3,4,5]));

5 个答案:

答案 0 :(得分:3)

.forEach返回未定义。您可能想.map到一个新数组并返回:

 return nums.map(function (element) {
      return (element % 2 == 0) ? element *= 2 : element *= 3;
 });

确保您还必须在内部函数内返回该语句,否则该结果也将为未定义。

答案 1 :(得分:0)

forEach不返回任何内容-改用map

var modifyArray = nums => nums.map(element => element % 2 == 0 ? element *= 2 : element *= 3)
console.log(modifyArray([1,2,3,4,5]));

还请注意,传递给forEach的函数内部没有返回任何内容-使用ES5 function时,您需要显式return-ES6 =>不需要

答案 2 :(得分:0)

请参阅上面的答案。

如果您仍然想使用forEach

,则有一种解决方法
let result = []
var modifyArray = (nums) => {
     nums.forEach(function (element) {
          result.push((element % 2 == 0) ? element *= 2 : element *= 3);
     })
    return result;

}
modifyArray([1,2,3,4,5])
console.log(result)

答案 3 :(得分:0)

使用for循环怎么样?

var modifyArray = (nums) => {
    for (let i = 0; i < nums.length; i++) {
        let element = nums[i];
        // console.log(element + ' - ' + element % 2 );
        nums[i] = (element % 2 == 0) ? element *= 2 : element *= 3;
    }
    return nums;
}

console.log(modifyArray([1,2,3,4,5]));

答案 4 :(得分:0)

对于每个返回未定义的返回值,因为它不返回任何内容,但是您可以使用forEach通过将数据推入数组来执行相同的操作。注意,我没有改变您的方法,只是扩展了它

var modifyArray = (nums) => {
  var somearray = []
  nums.forEach((element) => somearray.push((element % 2 == 0) ? element *= 2 : element *= 3));
  return somearray;
}
console.log(modifyArray([1, 2, 3, 4, 5]));

使用array.push将数据推入数组。如果要使用map方法,也可以使用

var modifyArray = (nums) => {
     return nums.map((element) => { return (element % 2 == 0) ? element *= 2 : element *= 3 });
}
console.log(modifyArray([1,2,3,4,5]));

要用于循环吗?然后,您也可以尝试这种方法。和forEach循环一样

var modifyArray = (nums) => {
  var somearray = [];
  for (let i = 0; i < nums.length; i++) {
    somearray.push((nums[i] % 2 == 0) ? nums[i] *= 2 : nums[i] *= 3)
  }
  return somearray;
}

console.log(modifyArray([1, 2, 3, 4, 5]));