let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
i want to get the sum of all values. How can i do this ?
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
i want to get the sum of all values. How can i do this ?
You have at least two options:
Recursion
Loop
With recursion, you can write a function for this that will call itself (recurse) when necessary.
For instance:
function sumValues(list) {
let sum = list.value;
if (list.rest) {
// Recurse
sum += sumValues(list.rest);
}
return sum;
}
Live Example:
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
function sumValues(list) {
let sum = list.value;
if (list.rest) {
// Recurse
sum += sumValues(list.rest);
}
return sum;
}
console.log(sumValues(list));
That can be written in a shorter way, but I wanted to emphasize the steps above:
function sumValues(list) {
return list.value + (list.rest ? sumValues(list.rest) : 0);
}
Live Example:
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
function sumValues(list) {
return list.value + (list.rest ? sumValues(list.rest) : 0);
}
console.log(sumValues(list));
This particular structure, though, works just fine with a loop:
function sumValues(list) {
let sum = 0;
for (let entry = list; entry; entry = entry.rest) {
sum += entry.value;
}
return sum;
}
Live Example:
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
function sumValues(list) {
let sum = 0;
for (let entry = list; entry; entry = entry.rest) {
sum += entry.value;
}
return sum;
}
console.log(sumValues(list));
Or with while
:
function sumValues(list) {
let sum = 0;
let entry = list;
while (entry) {
sum += entry.value;
entry = entry.rest;
}
return sum;
}
Live Example:
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
function sumValues(list) {
let sum = 0;
let entry = list;
while (entry) {
sum += entry.value;
entry = entry.rest;
}
return sum;
}
console.log(sumValues(list));
Using recursion is a possible way of iterating through all of the nested objects.
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
const sum = (list) => {
let acc = list.value;
if (list.rest) {
acc += sum(list.rest);
}
return acc;
}
var res = sum(list);
console.log(res);
Iterative and recursive solutions with a destructuring assignment.
let list = {
value: 3,
rest: {
value: 7,
rest: {
value: 15,
rest: null
}
}
};
function sum_iteratively({ value, rest }) {
while(rest) {
value += rest.value;
rest = rest.rest;
}
return value;
}
function sum_recursively({ value, rest }) {
return value + (rest?sum_recursively(rest):0);
}
console.log(sum_iteratively(list));
console.log(sum_recursively(list));
.as-console-wrapper { top: 0; max-height: 100% !important; }
Recursive Approcah Can be Used Like This
function findSum(list){
sum = list.value;
if(list.rest){
sum += findSum(list.rest);
}
return sum;
}
console.log(findSum(list));
OR More Simple Like This
function findSum(list){
return list.rest ? findSum(list.rest) + list.value : list.value;
}