◆ 関数の結果を if の条件にしてなにかの処理をするのが複数ある
  ◆ else のときに次の関数の結果に対して if が続く
◆ const でやるとネストが深くなる
  ◆ ネストしないためには即時関数にして if の処理後に return
◆ const を捨てて if の条件式で代入が短く書けるけど見やすさイマイチ
◆ switch が意外と見やすいけど 縦が揃っていて break などでスペースあるから見やすいだけかも

いまいち言葉に表しづらいので 下のプログラムを見てください
これが今回やりたいことです

const v = fn1(value)
if (v) {
console.log("1", v)
} else {
const v = fn2(value)
if (v) {
console.log("2", v)
} else {
const v = fn3(value)
if (v) {
console.log("3", v)
}
}
}

複数の関数があって結果が true になったら何かの処理をして false なら次の関数の処理です
const を使おうと頑張った結果が上の深いネストになりました

これをもう少し見やすくわかりやすくしたいです

単純なところだと即時関数実行で return でしょうか

!(function() {
const v1 = fn1(value)
if (v1) {
console.log("1", v1)
return
}
const v2 = fn2(value)
if (v2) {
console.log("2", v2)
return
}
const v3 = fn3(value)
if (v3) {
console.log("3", v3)
return
}
})()

if に入ったら return するので ネストはなくせます
ループ処理にできそうな気もしますが このサンプルでは全部の if が console.log してるだけですが 本来はそれぞれ違う予定なのでループにはできないです
fn1 や fn2 の関数に対して 関数→関数の Map を作ってそれぞれの if の処理を関数化しておくこともできますがそこまでは今回はしないことにします

const を捨てて パット見わかりづらい条件式で代入をすればシンプルにはなります

let v = null
if ((v = fn1(value))) {
console.log("1", v)
} else if ((v = fn2(value))) {
console.log("2", v)
} else if ((v = fn3(value))) {
console.log("3", v)
}

短く書けはしますが 見やすさ的にあんまり良いとは言えないです
なんとなく switch ってどうだろうと思ったので switch にしてみました

let v = null
switch (true) {
case !!(v = fn1(value)): {
console.log("1", v)
break
}
case !!(v = fn2(value)): {
console.log("2", v)
break
}
case !!(v = fn3(value)): {
console.log("3", v)
break
}
}

パット見では揃ってる感じがしてきれいで見やすいです
ただ case に一致するかのチェックが完全一致なので !!(v = fn1(value)) というところがちょっとわかりづらいです

それでも思ったよりよかったので
実例を入れてみました

const text = "t"
let v = null
switch (true) {
case !!(v = text.match(/^[0-9]$/)): {
console.log(v + " is in 0-9")
break
}
case !!(v = text.match(/^[a-z]$/)): {
console.log(v + " is in a-z")
break
}
case !!(v = text.match(/^[A-Z]$/)): {
console.log(v + " is in A-Z")
break
}
}

!! はやっぱりなんか気になります
そこで思いついたのがこれ

const text = "t"
const of = Boolean
let v = null
switch (true) {
case of(v = text.match(/^[0-9]$/)): {
console.log(v + " is in 0-9")
break
}
case of(v = text.match(/^[a-z]$/)): {
console.log(v + " is in a-z")
break
}
case of(v = text.match(/^[A-Z]$/)): {
console.log(v + " is in A-Z")
break
}
}

of という名前の Boolean 関数を用意すれば case of となってなんか構文みたいです
単体で of を見るとなぜ of が Boolean 型に変換する関数なのかよくわからない欠点はありますけど

とはいえやっぱり if のほうが文字数は少ないですし シンプルです
if は文字がつまりすぎて見づらく感じますが switch だと case とか break がある分 見た目的にスペースが空いているのと if と else if でインデントのズレがない分縦に揃ってるからきれいに見えてるだけな気がします
switch パット見の見た目はキレイですが if からすれば無駄な行も多いですし実際に使うのは if ですかねー