2016-12-08 3 views
1

Я только начинаю изучать JavaScript, и я должен сделать задачу:Как превратить каждый элемент массива в квадратный корень и суммировать их

Создать функцию с локальными переменными, которая превращает каждый элемент массива [ 0,1,2,3,4,5] в sqrt и суммирует их.

Я знаю, как сделать функцию, а затем я должен сделать петлю - У меня есть проблема со следующим шагом и с использованием Math.Sqrt ...

function myFunction() { 
    var numbers = ['0','1', '2', '3', '4', '5']; 
    var total = 1; 

    for (var i = 1; i < numbers.length; i++) { 
     var result = Math.sqrt(numbers[i++]) * +numbers[i]; 
     console.log(result); 
    } 
} 

myFunction(); 
+0

Прежде всего, вы можете рассмотреть возможность создания элементов чисел массива 'numbers', а не строк. –

+0

@MikeMcCaughan он действительно допустил это, но в данный момент цикл на самом деле не суммирует ничего – Alnitak

+0

'numbers.map (function (strNumber) {return Math.sqrt (parseInt (strNumber))}) .reduce (function (prev, num) {return prev + num}, 0) ' – TryingToImprove

ответ

1

Поскольку ФП в начале этапы обучения использованию JavaScript Я представляю метод прямой прямой итерации, приведенный ниже. В то время как в другом ответе представлен декларативный подход, для ОП важно, чтобы сначала разобраться с основами. Функция

function sumSquareRoots(numbers) { 
    var total = 0; 
    for (var i = 0; i < numbers.length; i++) { 
     var sqrt = Math.sqrt(numbers[i]); 
     total = total + sqrt; 
    } 
    return total; 
} 

var numbers = ['0','1', '2', '3', '4', '5']; 
var result = sumSquareRoots(numbers); 
console.log(result); 
+0

Вы почти наверняка хотите вернуть результат и напечатать его снаружи, а не распечатать его внутри. –

+0

OP только что зарегистрировал результат на консоли. Нет упоминания о возврате результата. – bhspencer

+0

@bhspencer благодарит так много, мне действительно нужно что-то простое, так как я только начинаю. Теперь я понимаю, что я сделал не так! – asheri

4

Это (синтаксис ES2015) суммирует квадратные корни из массива чисел:

let sumRoots = array => array.map(Math.sqrt).reduce((a, b) => a + b, 0); 

Array.prototype.map функция является стандартным способом, чтобы превращать элементы массива в (новый) измененный массив и Array.prototype.reduce используется для сглаживания полученного массива в его сумму.

Если вы не можете справиться с синтаксисом ES2015, получить лучший браузер или использовать это:

function sumRoots(array) { 
    return array.map(Math.sqrt) 
       .reduce(function(a, b) { 
        return a + b; 
       }, 0); 
} 
+0

Как и мой комментарий, но без обращения к строковым номерам – TryingToImprove

+4

Почему бы просто не просто 'a.reduce ((a, b) => a + Math.sqrt (b)), 0);'? Кажется unesseccary отображать, когда каждый элемент посещается во время сокращения в любом случае. – Paulpro

+2

@Paulpro Карта, за которой следует сокращение, является более смысловой. он лучше отражает характер проблемы. –

0
function myFunction() { 
    var numbers = ['0','1', '2', '3', '4', '5']; 
    var sum=0; 
    for (var i = 0; i < numbers.length; i++) { 
     sum += Math.sqrt(numbers[i]); 
    } 
    console.log(sum); 
} 

myFunction(); 

Это вы ищете?

+0

да, это хорошо! Я прошу, чтобы я упустил часть с «sum + = etc» :) Спасибо! Это так просто хахаха – asheri

0
var sum = ['0','1','2','3','4','5'] 
            .reduce((a,b)=>(a+Math.sqrt(b)),0); 

Для этого вам необходимо понять внутренний механизм метода reduce. в этом методе значение b всегда является элементом массива. где

на каждой итерации a = возвращаемое значение.

 Смежные вопросы

  • Нет связанных вопросов^_^