以下代码是否有任何简化?

时间:2019-01-01 21:13:48

标签: javascript

所以我做了这个检查x是否是y的幂的函数,我想知道是否可以用更简单的方式编写

我已经做了所有可以简化的事情,但是我想知道它是否可以更简单

  let IsPowerOf = (x, y) => {
  let l = x,
   n = 0;
  while (l % y == 0) {
    l / = y;
    n++;
  }
  if (Math.pow(y, n) == x)
    console.log(" true ");
  else
    console.log("false");
};

如果进行了任何简化,它仍然可以正常工作

4 个答案:

答案 0 :(得分:2)

一个很好的简化方法是使用对数。假设您的浏览器支持Number.isInteger(),则只需执行以下操作:

function isPowerOf(x, y) {
  return Number.isInteger(Math.log(x) / Math.log(y));
}

console.log(isPowerOf(16, 2));

答案 1 :(得分:1)

类似这样的东西:

const isPowerOf = (x, y) => {
  while (x % y == 0) {
    x /= y;
  }
  return x == 1;
};

console.log(isPowerOf(32, 2)); //Should return true

答案 2 :(得分:0)

const IsPowerOf = (a, b) => {
  n = parseInt(Math.log(a) / Math.log(b));
  console.log(Math.pow(b, n) == a);
};

IsPowerOf(25,5); // true
IsPowerOf(9,3); // true
IsPowerOf(7,3); // false

答案 3 :(得分:0)

您还可以使用对数并通过检查除以1的余数是否等于0来进行整数检查。

const isPowerOf = (x, y) => (Math.log(x)/Math.log(y)) % 1 === 0;

console.log(isPowerOf(64,8));
console.log(isPowerOf(0.01,0.1));
console.log(isPowerOf(100,11));