オブジェクトをループして、一致する結果を新しいオブジェクトに含めたいと考えています。一致しない結果を破棄/無視したい。
問題は、メソッド内からの一致がなかった空のエントリを持つオブジェクトを取得することです。
[[[[[null, null], null, null], <Layer id:10 name:card2 (0,1033) 894x812>]]]
私が本当に欲しいのはただ
<Layer id:10 name:card2 (0,1033) 894x812>
この関数は、if が最初に一致したインスタンスを見つけてそれを返すまで、オブジェクト内を再帰的に調べることになっています。(最初のインスタンスだけでなく、一致するすべてのインスタンスを収集することにも落ち着きます)
r = (n, obj) ->
if obj.name is n
obj
else if typeof obj is "object"
obj = obj.subLayers
for key, value of obj
if value.name is n
value
else if value.subLayers.length
r(n, value)
else
null
l = r("card2",wrapper)
print l
コンテキストとして、これはFramer.js用であり、上記の例はここにありますhttp://share.framerjs.com/6qax51amay0v/
この例では、一致しない値を完全にスキップしますが、r()
常に何かを返し、出力をキャプチャする変数内に空のエントリを作成します。何も返さないことが答えであるか、別のオブジェクト要素を追加すべきではない可能性があります[]