Oma*_*ran 6 javascript return function javascript-objects
你好,我在函数中返回一个对象有一个问题,假设我有一个对象:
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": {}
}];
Run Code Online (Sandbox Code Playgroud)
我想要的是一个函数(使用纯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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我只是看不到我做错了什么?
谢谢。
进行递归调用后,您缺少回报。如果在递归后找到对象,则需要继续将结果冒泡(通过返回它)。您还应该按照@ scott-marcus的指示使用i < len
(not 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7684 次 |
最近记录: |