Tuesday, May 14, 2024
 Popular · Latest · Hot · Upcoming
111
rated 0 times [  118] [ 7]  / answers: 1 / hits: 22686  / 7 Years ago, wed, july 26, 2017, 12:00:00

hello , I have a problem returning an object in my function, Let's say I have an object:



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: {}
}];


what i want is a function (in pure javascript) that can find an object with a specific key and value , and i have created a function but its just not working fine ? , my function :



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);
}
}
}
}


I just can't see what I've done wrong ?


thanks.


More From » function

 Answers
17

You're missing a return after making the recursive call. If the object is found after recursing, you need to continue to bubble that result up (by returning it). You should also be using i < len (not i <= len) as pointed out by @scott-marcus.





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




[#56962] Monday, July 24, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
arielle

Total Points: 373
Total Questions: 105
Total Answers: 96

Location: Azerbaijan
Member since Fri, May 12, 2023
1 Year ago
;