Необходимо найти сумму всех чисел многомерного объекта. Т.к. учусь, пробую через for in, но выдает не тот результат который нужен. Окажите помощь
let sum = 0;
let obj = {
key1: {
a: 1,
b: 2,
c: {
d: 3,
e: 4,
},
f: 5,
},
key2: {
g: 6,
h: 7,
},
};
for (key in obj) {
let subObj = obj[key]
for (key in subObj) {
let keySubObj = subObj[key];
for (key in keySubObj) {
let keyDeepObject = keySubObj[key]
sum += keyDeepObject
}
}
}
console.log(sum);
Ответы (3 шт):
Автор решения: EzioMercer
→ Ссылка
Если хотите без рекурсии и точно знаете максимальную глубину вашего объекта, то можно так:
let sum = 0;
let obj = {
key1: {
a: 1,
b: 2,
c: {
d: 3,
e: 4,
},
f: 5,
},
key2: {
g: 6,
h: 7,
},
};
for (const key in obj) {
if (typeof obj[key] === 'number') {
sum += obj[key];
continue;
}
const subObj = obj[key]
for (const key in subObj) {
if (typeof subObj[key] === 'number') {
sum += subObj[key];
continue;
}
const keySubObj = subObj[key];
for (const key in keySubObj) {
sum += keySubObj[key]
}
}
}
console.log(sum);
Автор решения: Neverm1ndo
→ Ссылка
Вариант с рекурсией
let sum = 0;
let obj = {
key1: {
a: 1,
b: 2,
c: {
d: 3,
e: 4,
},
f: 5,
},
key2: {
g: 6,
h: 7,
},
};
function sumOfValues(obj) {
return Object.values(obj).reduce(function(sum, current) {
if (typeof current !== 'number') return sumOfValues(current) + sum;
return sum + current;
}, 0);
}
console.log(sumOfValues(obj)); //28
Автор решения: Игорь Трубников
→ Ссылка
let sum = 0;
let obj = {
key1: {
a: 1,
b: 2,
c: {
d: 3,
e: 4,
},
f: 5,
},
key2: {
g: 6,
h: 7,
},
};
for(key in obj) {
let subObj = obj[key]
for(key in subObj) {
let keySubObj = subObj[key];
for(key in keySubObj) {
let keyDeepObject = keySubObj[key]
sum += keyDeepObject
}
if(parseInt(keySubObj)) {
sum += keySubObj
}
}
}
console.log(sum)