Ну, я знаю, це старе питання. Але, виходячи з відповіді SwiftNinjaPro, я спростив цю функцію та виправив деякі проблеми з NaN. Примітка: Ця функція використовувала функцію ES6, функцію стрілки та рядки шаблонів, а також експоненцію. Отже, це може не працювати в старих браузерах:
Math.numberRoot = (x, n) => {
return (((x > 1 || x < -1) && n == 0) ? Infinity : ((x > 0 || x < 0) && n == 0) ? 1 : (x < 0 && n % 2 == 0) ? `${((x < 0 ? -x : x) ** (1 / n))}${"i"}` : (n == 3 && x < 0) ? -Math.cbrt(-x) : (x < 0) ? -((x < 0 ? -x : x) ** (1 / n)) : (n == 3 && x > 0 ? Math.cbrt(x) : (x < 0 ? -x : x) ** (1 / n)));
};
Приклад:
Math.numberRoot(-64, 3);
Приклад (результат уявного числа):
Math.numberRoot(-729, 6);