forEach возвращает неопределенное - Как вернуть массив вместо? - PullRequest
0 голосов
/ 18 мая 2019

Ниже приведен код, в котором я пытался изменить массив с помощью функции стрелки, но во время работы он возвращает значение 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 ]

3 голосов
/ 18 мая 2019

.forEach возвращает неопределенное значение. Вы, вероятно, хотите .map в новый массив и вернуть это:

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

Конечно, вы также должны возвращать инструкцию внутри внутренней функции, в противном случае она также будет иметь неопределенное значение.

0 голосов
/ 18 мая 2019

Для каждого возвращается undefined, так как он ничего не возвращает, но вы можете использовать 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 для передачи данных в массив. Если вы хотите использовать метод карты, вы также можете использовать его как

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]));
0 голосов
/ 18 мая 2019

Как насчет использования для циклов?

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]));
0 голосов
/ 18 мая 2019

См. Ответы выше.

Существует обходной путь, если вы все еще хотите использовать 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)
0 голосов
/ 18 мая 2019

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 =>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...