#javascript #conditional-operator
#javascript #условный оператор
Вопрос:
У меня есть этот троичный оператор
function digPow(n, p){
return Number.isInteger(("" n).split("").map((num,index) => Math.pow(parseInt(num),(p index))).reduce((a, b) => a b, 0)/n) ? ("" n).split("").map((num,index) => Math.pow(parseInt(num),(p index))).reduce((a, b) => a b, 0)/n : -1;
}
Как вы можете видеть, это очень длинный 1 строка. Мой вопрос в том, как мне вспомнить значение внутри числа.isInteger() так что мне не нужно повторять это снова для троичного оператора только в 1 строке.
Это код, из которого мне нужно значение:-
("" n).split("").map((num,index) => Math.pow(parseInt(num),(p index)))
.reduce((a, b) => a b, 0)/n
Есть ли какой-либо синтаксис для этого? Я относительно новичок в JS
РЕДАКТИРОВАТЬ: на самом деле главный вопрос: «Возможно ли вызвать значение изнутри троичного оператора без использования переменной»
РЕДАКТИРОВАТЬ-2: Извините за мое плохое кодирование. Вот более простой способ задать мой вопрос
const x = 6
const y = 3
console.log(Number.isInteger(x y/3) ? x y/3 : -1)
Можно ли вызвать значение x y / 3 без его повторения или создания новой переменной?
Комментарии:
1. вы можете заменить
Math.pow(3, 4)
на3 ** 4
вы также можете заменитьparseInt(num)
наnum
в большинстве случаев.2. Что этот код вообще пытается здесь сделать?
3. То, что вы можете что-то сделать в одной строке, не означает, что вы должны это делать. Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям.
4. многие разработчики не знают о meta или других ветвях SO и публикуют свои вопросы здесь. я бы сказал, что мы не должны судить слишком быстро: D
5. Прошу прощения у всех, кто запутался из-за моего вопроса, пожалуйста, посмотрите на редактирование 2 для более четкого вопроса. Прошу прощения…
Ответ №1:
Не совсем уверен, что делает ваша функция или какие аргументы она должна принимать, но вы могли бы использовать самоисполняющуюся анонимную функцию, известную как IIFE (немедленно вызываемое выражение функции).
Давайте начнем с форматирования того, что у вас есть в данный момент:
const digPow = (n, p) => Number.isInteger(
("" n)
.split("")
.map((num, index) => Math.pow(parseInt(num), (p index)))
.reduce((a, b) => a b, 0) / n
)
? ("" n)
.split("")
.map((num, index) => Math.pow(parseInt(num), (p index)))
.reduce((a, b) => a b, 0) / n
: -1;
console.log(digPow(6, 3)); // 36
Похоже, что эта часть находится внутри условия, а также возвращает значение, если результат является целым числом:
("" n)
.split("")
.map((num, index) => Math.pow(parseInt(num), (p index)))
.reduce((a, b) => a b, 0) / n
Вы можете свести свою логику к следующему (псевдокод):
const digPow = (x => Number.isInteger(x) ? x : -1)(split/map/reduce/divide);
Давайте передадим это в IIFE:
const digPow = (n, p) => (
(value) => Number.isInteger(value) ? value : -1)
(("" n)
.split("")
.map((num, index) => Math.pow(parseInt(num), (p index)))
.reduce((a, b) => a b, 0) / n);
console.log(digPow(6, 3)); // 36
Комментарии:
1. Вау, это на самом деле блестяще. Спасибо :).