2016-03-26 7 views
0

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

var multiply = function() { 
    var i, sum = 0; 
    for (i = 0; i < arguments.length; i++) { 
     sum *= arguments[i]; 
    } 
    return sum; 
}; 

Когда я называю это так - multiply(10, 5, 5) - возвращает значение 0, если ответ должен быть 250 (10 х 5 х 5). Что я здесь делаю неправильно?

+9

'0' раз ничего '0'. Начните с 'sum = 1' –

+0

' sum = 1' Это должно помочь –

+1

Thats it! Большое спасибо –

ответ

1

Умножение любого числа на 0 составляет 0.

Так установить var sum = 1;

2

Вы можете сделать это также с помощью Array.prototype.reduce():

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

Это не имеет никакого преимущества по сравнению с циклом for, за исключением того, что вы четко указываете, что хотите скопировать значение с помощью функции, предназначенной для этого.

var multiply = function() { 
    return Array.prototype.reduce.call(arguments, function(a, b) { 
    return a * b; 
    }); 
}; 

Вы должны использовать Array.prototype.reduce.call конструкции, потому что arguments только массив как объект, большинство сред.

1

Поскольку ES6 ответ будет =>

const multiply = (..args) => args.reduce((accum, val) => accum * val, 1); 
Смежные вопросы