æ— é™æ•°é‡çš„å‚æ•°çš„æƒåŠ›çš„å€å¢žã€‚我怎么é‡æž„?

时间:2017-10-31 03:01:00

标签: javascript pow

function power(a, b, c, d) {
  return Math.pow(a, a) * Math.pow(b, b) * Math.pow(c, c) * Math.pow(d, d)
}

我想知é“是å¦æœ‰ä¸€ç§ä½¿ç”¨é€’å½’é‡æž„的方法?或者å¯èƒ½æ˜¯å›žè°ƒå‡½æ•°ï¼Ÿ

2 个答案:

答案 0 :(得分:4)

您å¯ä»¥å°†Array.prototype.reduce()与rest parameters结åˆä½¿ç”¨ï¼Œå¦‚下所示:



function power(...args){
  return args.reduce((a, v) => a * Math.pow(v, v), 1);
}

console.log(power(1, 2, 3, 4)); // 27648




如果您定ä½çš„æµè§ˆå™¨ä¸æ”¯æŒå…¶ä»–å‚数,则å¯ä»¥ä½¿ç”¨arguments对象。

å¦è¯·æ³¨æ„,它ä¸ä¼šä½¿ç”¨éžå¸¸é«˜çš„æ•°å­—æ¥ä½¿ç»“果溢出并产生Infinity的结果。

答案 1 :(得分:0)

ES5 递归版本:

function power(){
  var arg = arguments[0];
  if(isNaN(parseFloat(arg)) || !isFinite(arg)) {
    return NaN;
  } 
  var pow = Math.pow(arg, arg);
  return arguments.length === 1 ? pow :
    pow * power.apply(this, Array.prototype.slice.call(arguments, 1));
}

console.log(power(1, 2, 3, 4, 5, 6)); // 4031078400000

ES5 for-loop版本:

function power() {
  var result = NaN;
  for (var i = 0; i < arguments.length; i++) {
    var arg = arguments[i];
    if(isNaN(parseFloat(arg)) || !isFinite(arg)) {
      return NaN;
    }
    result = (result || 1) * Math.pow(arg, arg);
  }
  return result;
}

console.log(power(1, 2, 3, 4, 5, 6)); // 4031078400000

我还包括对ä¸éœ€è¦çš„(éžæ•°å­—/æ— é™ï¼‰å‚æ•°çš„ä¿æŠ¤ï¼Œå› æ­¤å¦‚æžœå‚æ•°ä¸æ˜¯å¾ˆå¥½ï¼Œä¸¤ä¸ªå‡½æ•°éƒ½ä¼šè¿”回NaN。