Reputation: 3335
I have an object with nested object:
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
I need to return all key: value
of list
and I must use recursion. I have tried to push the nested object to the local variable in the function, but it fails in the second iteration because the names are different.
Here is the function:
function printList(list){
let nested = {};
if(list.hasOwnProperty('next')) {
nested = list.next;
printList(nested);
} else {
return nested;
}
}
Is there a way to solve it with recursion?
It should return the value
properties. In this case
1
2
3
4
Upvotes: 4
Views: 8371
Reputation: 531
var sum = 0;
function printList(list) {
if (list.next) {
sum = sum + list.value;
printList(list.next);
}
if (!list.next) {
sum = sum + list.value;
}
return sum;
}
console.log(printList(list));
Upvotes: 0
Reputation: 23955
Here's a method that attempts to stay close to your own attempt.
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
function printList(list){
if (!list)
return;
console.log(list.value)
if (list.hasOwnProperty('next'))
printList(list.next);
}
printList(list)
Upvotes: 2
Reputation: 50654
You can create a function which checks to see if next
is defined for a given object, if it is, you can add the value
into an array, along with the rest of the values retrieved from further recursive calls:
const list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
const get_keys = ({value, next}) =>
next ? [value, ...get_keys(next)] : [value];
console.log(get_keys(list));
Upvotes: 3
Reputation: 386520
You could return an array with the values and get the nested values after a check
function printList({ value, next }) {
return [value, ...(next ? printList(next) : [])]
}
let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } };
console.log(printList(list));
Upvotes: 7