Coffeescript 使用键数组检查嵌套对象

Coffeescript 使用键数组检查嵌套对象,coffeescript,Coffeescript,我有一个数组(目标),其中包含一系列嵌套对象的键。我需要先确定那里有一个对象,然后再为它设置一个值。这段代码正在运行,但只有在我愿意重复的范围内 我如何在数组中n个键的情况下执行此操作,而不重复此切换到无穷大 for t, index in target switch i when 1 if object[target[0]] is undefined object[target[0]] = {} w

我有一个数组(目标),其中包含一系列嵌套对象的键。我需要先确定那里有一个对象,然后再为它设置一个值。这段代码正在运行,但只有在我愿意重复的范围内

我如何在数组中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]] = {}
从我的头顶警告未经测试的代码。但这应该行得通

current = object
for t in target
  current = (current[t] ?= {})
或者更具javascripty的版本:

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

第一个更清晰,第二个更优雅(并且不会污染
current
的范围)。

使用递归查看树迭代。请注意,
Array::reduce
并非在所有浏览器中都可用。以下是一个可以用作备用方案的实现: