[英]How to multiply all arguments together inside an array and return the product
如何將數組中的所有參數相乘並返回乘積
這是我嘗試過的,但我真的不知道該怎么做。 感謝任何幫助!
function multiplyArguments() {
let product = 1;
for (let i = 0; i < arguments.length; i++)
{
product = product * arguments[i];
}
return product;
}
你的代碼沒問題。 只需添加一個if
來處理0
args 條件。
注意:您應該更喜歡使用rest 參數- 您可以在此處查看差異。
function multiplyArguments(...args) { if(args.length === 0) return 0; let product = 1; for (let i = 0; i < args.length; i++) { product = product * args[i]; } return product; } console.log(multiplyArguments()); console.log(multiplyArguments(5)); console.log(multiplyArguments(5, 2)); console.log(multiplyArguments(5, 2, 4));
您還可以使用Array.reduce()
:
const multiplyArguments = (...args) => args.length ? args.reduce((prod, n) => prod * n) : 0; console.log(multiplyArguments()); console.log(multiplyArguments(5)); console.log(multiplyArguments(5, 2)); console.log(multiplyArguments(5, 2, 4));
如何將數組中的所有參數相乘並返回乘積
- 如果沒有傳入參數,則返回 0
- 如果傳入一個參數,只需返回它
- 我正在使用 JavaScript
這些都是有些奇怪的要求。 乘法的中性元素是1
,而不是0
,因此如果集合為空,返回1
會更有意義。
通常,當您想將集合的元素“減少”為一個值時,使用的方法是恰當命名的Array.prototype.reduce
:
const multiplyArguments = (...nums) => nums.reduce((acc, el) => acc * el, 1); console.log(multiplyArguments()); // 1 console.log(multiplyArguments(5)); // 5 console.log(multiplyArguments(5, 2)); // 10 console.log(multiplyArguments(5, 2, 4)); // 40
如您所見,如果我們想為空集合返回中性元素,這絕對是微不足道的,這是 IMO 的正確方法。
不過,修改它以返回0
很簡單:我們可以有條件地傳遞不同的中性元素,或者有條件地完全繞過reduce
。
這里我們傳遞了一個不同的中性元素:
const multiplyArguments = (...nums) => nums.reduce( (acc, el) => acc * el, nums.length === 0 ? 0 : 1 ); console.log(multiplyArguments()); // 0 console.log(multiplyArguments(5)); // 5 console.log(multiplyArguments(5, 2)); // 10 console.log(multiplyArguments(5, 2, 4)); // 40
我們可以更聰明地使用0
為假而所有其他數字為真的事實:
const multiplyArguments = (...nums) => nums.reduce( (acc, el) => acc * el, nums.length ? 1 : 0 ); console.log(multiplyArguments()); // 0 console.log(multiplyArguments(5)); // 5 console.log(multiplyArguments(5, 2)); // 10 console.log(multiplyArguments(5, 2, 4)); // 40
我們可以更聰明地使用true
的數字強制為1
而false
為0
的true
:
const multiplyArguments = (...nums) => nums.reduce( (acc, el) => acc * el, +!!nums.length ); console.log(multiplyArguments()); // 0 console.log(multiplyArguments(5)); // 5 console.log(multiplyArguments(5, 2)); // 10 console.log(multiplyArguments(5, 2, 4)); // 40
請注意,“聰明”聽起來很酷,但實際上不是一個好主意! 特別是,調試代碼比最初編寫代碼要困難得多,這意味着,如果您盡可能聰明地編寫代碼,那么您顯然不夠聰明,無法調試它!
或者,我們完全跳過reduce
:
function multiplyArguments(...nums) { if (!nums.length) { return 0; } return nums.reduce( (acc, el) => acc * el, +!!nums.length ); } console.log(multiplyArguments()); // 0 console.log(multiplyArguments(5)); // 5 console.log(multiplyArguments(5, 2)); // 10 console.log(multiplyArguments(5, 2, 4)); // 40
請注意, arguments
已被棄用,不應使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.