2

一連のネストされたオブジェクトへのキーを持つ配列 (ターゲット) があります。後で値を設定する前に、そこにオブジェクトがあることを確認する必要があります。このコードは機能していますが、繰り返すのが面倒な限りです。

このスイッチを無限に繰り返さずに、配列内のn個のキーに対してこれを行うにはどうすればよいですか?

for t, index in target
    switch i
        when 1
            if object[target[0]] is undefined
                object[target[0]] = {}
        when 2
            if object[target[0]][target[1]] is undefined
                object[target[0]][target[1]] = {}
        when 3
            if object[target[0]][target[1]][target[2]] is undefined
                object[target[0]][target[1]][target[2]] = {}
        when 4
            if object[target[0]][target[1]][target[2]][target[3]] is undefined
                object[target[0]][target[1]][target[2]][target[3]] = {}
        when 5
            if object[target[0]][target[1]][target[2]][target[3]][target[4]] is undefined
                object[target[0]][target[1]][target[2]][target[3]][target[4]] = {}
        when 6
            if object[target[0]][target[1]][target[2]][target[3]][target[4]][target[5]] is undefined
                object[target[0]][target[1]][target[2]][target[3]][target[4]][target[5]] = {}
4

1 に答える 1

1

頭のてっぺんからテストされていないコードを警告します。しかし、これはうまくいくはずです...

current = object
for t in target
  current = (current[t] ?= {})

または、より javascripty なバージョン:

target.reduce ((o,t)-> o[t]?={}), object

最初のものはより読みやすく、2番目のものはよりエレガントな印象です(スコープを汚染しませんcurrent)。

于 2011-03-27T22:01:31.953 に答える