私はJSONオブジェクトを持っています。私が達成しようとしているのは、idでchild_objectsのオブジェクトを検索できるということです。私は、次のように再帰とArray.each()
および機能を使用しています:mootools javascript戻り値再帰を伴うArray.each()
1 Template.get_object_attributes_by_id = function(id, template)
2 {
3 var template_obj = JSON.parse(template);
4 console.log(Template.check_for_id_equality(template_obj, id);
5 return Template.check_for_id_equality(template_obj, id);
6 }
7
8 Template.check_for_id_equality = function(obj, id)
9 {
10 if (obj.attrs.id !== id) {
11 if (obj.children === null || obj.children === undefined) {
12 return;
13 }
14 Array.each(obj.children, function(obj_child) {
15 return Template.check_for_id_equality(obj_child, id);
16 });
17 }
18 else {
19 console.log(obj);
20 return obj;
21 }
22 }
ライン19の出力はTemplate.get_object_attributes_by_id(id, template)
を呼び出した後に正しいオブジェクトですが、ライン4の出力がundefined
です。 Array.each()
は返品を「無視」し、そのまま続けるようです。だから今私の質問は、どのようにオブジェクトを正しく返すように、私はそれを関数get_object_attributes_by_id()
で取得することです。
更新:
入力(テンプレート)Iは、例えば、ID「プレースホルダ-2」を探していた次のようなJSONオブジェクトです。これは単なる例ですので、実際のJSONオブジェクトは明らかに有効であるため、括弧などがないか探してください。
{
"className":"Stage",
"attrs":{
"width":1337,
"height":4711
},
"children":[{
"className":"Layer",
"id":"placeholder-layer",
"attrs":{
"width":1337,
"height": 4711
},
"children":[{
"className":"Text",
"id":"placeholder-1",
"attrs":{
"fontsize":42,
"color":"black",
...
}
},
{
"className":"Text",
"id":"placeholder-2",
"attrs":{
"fontsize":37,
"color":"red",
...
}
},
...
]
}]
}
そして、これが予想される出力になります。私の同僚と私
{
"className":"Text",
"id":"placeholder-2",
"attrs":{
"fontsize":37,
"color":"red",
...
},
}
あなたはMooToolsのの[Object.subset](http://mootools.net/core/docs/1.6.0/Types/Object#Object:Object-subset)を確認しました?それがあなたが望むものでないなら、達成したいと思うエントリーとアウトプットの例を提供できますか? – Sergio
@Sergio残念ながら 'Object.subset'は私が必要なものではありません。私は入力の例と期待される出力を使って質問を更新しました。 – GiftZwergrapper