コードゴルフに初挑戦してみた (お正月版 各桁総和ダンジョン LV1-3)

コードゴルフ
言葉とその意味を知ったのは恐らく5年ほど前だったと思います。
ある目的を達成するための最短コードを競うもので、その魔術的なコードを見て、ただただ呆然とした覚えがあります。

そして2014年。
CodeIQというサービスに登録し、その中にコードゴルフの問題がありました。

今までは魔法の使えない「戦士」のような存在でしたが、この問題に挑戦することで「魔法使い見習い」くらいにはなれるかな?と思い、挑戦してみました。

問題

● 各桁総和の魔法

 1から9999まで順に整数が与えられますので、以下の計算結果になる値を求めて、戻してください。
・数値を1桁ずつばらばらにして、和を求める。
・その和が1桁にならなかった場合は、同じ操作を続けて、1桁になるまで計算を行う。
例)
123 → 1+2+3 → 6 を戻す
9876 → 9+8+7+6 → 30 → 3+0 → 3 を戻す

● コード入力
function yourCode() {
    var arr = [];
    for (var i = 1; i <= 9999; i ++) {
        arr.push(???);
    }
    return arr;
}

LV1

挑戦者求む!【JavaScript】お正月版 各桁総和ダンジョン LV1 by クロノス・クラウン合同会社 柳井 政和│CodeIQ

入力欄の文字数:175文字以内
禁止文字:なし

制限無し。
先人の知恵をお借りして最短コードでいけました!

6文字

i%9||9

剰余1-8はTrue扱い→1-8
剰余0の場合はFalse扱い→9、になります。

LV2

挑戦者求む!【JavaScript】お正月版 各桁総和ダンジョン LV2 by クロノス・クラウン合同会社 柳井 政和│CodeIQ

入力欄の文字数:50文字以内
禁止文字:1 2 3 4 5 6 7 8 9

0が禁止されてないのがポイント、ということで「0xA-!0」→「10-1」で9を作りました。

18文字

(i-!0)%(0xa-!0)+!0

LV3

挑戦者求む!【JavaScript】お正月版 各桁総和ダンジョン LV3 by クロノス・クラウン合同会社 柳井 政和│CodeIQ

入力欄の文字数:100文字以内
禁止文字:1 2 3 4 5 6 7 8 9 0 , + % ? : this eval function Function Array join split repeat ' "

制限つきすぎて2晩くらい解けず眠れない日々を過ごしましたが。
「String(undefined).length」 →9という力技で解きました。70文字とか全然ゴルフじゃないです。

70文字

i-(i/String(undefined).length|!i)*String(undefined).length||String(undefined).length

最短コードの黒魔術っぷりに期待してます。

2/5追記

魔法使いの方からリプ頂きました!