簡體   English   中英

如何將數組中的所有參數相乘並返回乘積

[英]How to multiply all arguments together inside an array and return the product

如何將數組中的所有參數相乘並返回乘積

  • 如果沒有傳入參數,則返回 0
  • 如果傳入一個參數,只需返回它
  • 我正在使用 JavaScript

這是我嘗試過的,但我真的不知道該怎么做。 感謝任何幫助!


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));

使用reduceRest 參數

 function multiplyAllArgs(...args) { if(args.length === 0) return 0; return args.reduce((arg, item) => (arg*item), 1); } console.log(multiplyAllArgs()); console.log(multiplyAllArgs(2)); console.log(multiplyAllArgs(2, 2));

如何將數組中的所有參數相乘並返回乘積

  • 如果沒有傳入參數,則返回 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的數字強制為1false0true

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM