hello、関数でオブジェクトを返すときに問題が発生しました。オブジェクトがあるとしましょう。
var elements = [{
"fields": null,
"id_base": "nv_container",
"icon": "layout",
"name": "container",
"is_container": true,
"elements" : [
//another elements set here
]
},
{
"id_base": "novo_example_elementsec",
"name": "hello",
"icon": "edit",
"view": {}
}];
特定のキーと値を持つオブジェクトを見つけることができる関数(純粋なJavaScript)が欲しいのですが、関数を作成しましたが、うまく機能しませんか? 、私の機能:
function findNested(obj, key, value) {
//Early return
if (obj[key] === value) {
console.log( 'before return' ); //until here . its fine
return obj; //not working
} else {
for (var i = 0, len = Object.keys(obj).length; i <= len; i++) {
if (typeof obj[i] == 'object') {
this.findNested(obj[i] , key, value);
}
}
}
}
私が間違ったことを確認できませんか?
ありがとう。
再帰呼び出しを行った後、戻りがありません。再帰後にオブジェクトが見つかった場合は、その結果を(返すことによって)泡立たせる必要があります。 @ scott-marcusで指摘されているように、i < len
(i <= len
ではなく)も使用する必要があります。
var elements = [{
"fields": null,
"id_base": "nv_container",
"icon": "layout",
"name": "container",
"is_container": true,
"elements": [
//another elements set here
]
},
{
"id_base": "novo_example_elementsec",
"name": "hello",
"icon": "edit",
"view": {}
}
];
function findNested(obj, key, value) {
// Base case
if (obj[key] === value) {
return obj;
} else {
for (var i = 0, len = Object.keys(obj).length; i < len; i++) {
if (typeof obj[i] == 'object') {
var found = this.findNested(obj[i], key, value);
if (found) {
// If the object was found in the recursive call, bubble it up.
return found;
}
}
}
}
}
console.log(findNested(elements, "icon", "layout")); // returns object
console.log(findNested(elements, "icon", "edit")); // returns object
console.log(findNested(elements, "foo", "bar")); // returns undefined