Как заставить эту проблему вызова вложенной функции работать в JavaScript? - PullRequest
0 голосов
/ 26 февраля 2020

Я экспериментирую с функциями. Я знаю, что вложенные функции возможны, но посмотреть, может ли кто-нибудь помочь с синтаксическими ошибками

ВЫЗОВ: создайте функцию, которая принимает число и создает массив от каждого числа до этого числа. Но верните квадрат каждого числа в виде массива, а затем сложите их. Вернуть сумму.

function squaredSum(number) {
   var squaredNumberArray = []
   
   for (var i = number; i > 0; i--) {
       squaredNumberArray.push(i**2)
   }  var sum = function(squaredNumberArray) {
        var summation = 0
       
        for (var x = 0; x < squaredNumberArray.length; x++) {
            summation = summation + squaredNumberArray[x];
        } 
    } return summation;
}

console.log(summation);

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Хорошо, во-первых, ваш код немного запутан, вам, вероятно, следует сделать отступ.

Функция, которую вы назначаете переменной "sum", должна возвращать "summation". Однако вы помещаете возвращаемый результат вне области действия этой функции.

Затем функция squaredSum должна возвращать то, что вернула функция суммы (избыточность), и должна получить параметр для работы (в данном случае это массив квадратов). ).

    function squaredSum(number) {
      var squaredNumberArray = []

      for (var i = number; i > 0; i--) {
        squaredNumberArray.push(i**2)
      }  

      var sum = function(squaredNumberArray) {
        var summation = 0
        for (var x = 0; x < squaredNumberArray.length; x++) {
            summation = summation + squaredNumberArray[x];
        }
        return summation;
      }

      return sum(squaredNumberArray);
  }
1 голос
/ 26 февраля 2020

Некоторые альтернативные реализации, если я правильно понимаю проблему.

function sumSquares(n) {
    const squares = []
    let sum = 0

    for(let x = 1; x <= n; x++) {
        squares.push(x*x)
    }

    for(let x = 0; x < n; x++) {
        sum += squares[x]
    }

    return sum
}

const result = sumSquares(5) // 55

console.log(result)

Альтернативно: создать массив длиной n. Разложите массив в новый массив для заполнения ключей.

Используйте ключи как целые числа; используйте map, чтобы возвести их в квадрат, а затем reduce, чтобы сложить их.

const sumSquares = (n) => 
    Object.keys([...Array(n+1)]).map(k => k*k).reduce((acc, c) => acc+c, 0)

const result = sumSquares(5)

console.log(result) // 55

Исправление существующей реализации:

function squaredSum(number) {
    var squaredNumberArray = []

    for (var i = number; i > 0; i--) {
        squaredNumberArray.push(i ** 2)
    }

    var sum = function(squaredNumberArray) {
        var summation = 0

        for (var x = 0; x < squaredNumberArray.length; x++) {
            summation = summation + squaredNumberArray[x]
        }
        return summation
    }

    return sum(squaredNumberArray)
}

console.log(squaredSum(5)) // 55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...