在JavaScript中,处理嵌套数组并将其中的数字相加是一个常见的任务。这通常涉及到递归遍历对象和数组,以找到所有的数字并进行累加。下面是一个示例代码,展示了如何实现这一功能:
function sumNestedNumbers(obj) {
let sum = 0;
function traverse(value) {
if (typeof value === 'number') {
sum += value;
} else if (Array.isArray(value)) {
value.forEach(item => traverse(item));
} else if (typeof value === 'object' && value !== null) {
Object.values(value).forEach(item => traverse(item));
}
}
traverse(obj);
return sum;
}
// 示例对象
const exampleObj = {
a: 1,
b: [2, { c: 3, d: [4, 5] }],
e: { f: [6], g: 7 }
};
console.log(sumNestedNumbers(exampleObj)); // 输出应该是 28
typeof
操作符检查变量的类型。forEach
方法遍历数组中的每个元素。Object.values
获取对象的所有值,并遍历这些值。function sumNestedNumbersSafe(obj, seen = new WeakSet()) {
if (seen.has(obj)) return 0;
seen.add(obj);
let sum = 0;
function traverse(value) {
if (typeof value === 'number') {
sum += value;
} else if (Array.isArray(value)) {
value.forEach(item => traverse(item));
} else if (typeof value === 'object' && value !== null) {
Object.values(value).forEach(item => traverse(item));
}
}
traverse(obj);
return sum;
}
通过这种方式,可以安全地处理包含循环引用的复杂对象结构。
领取专属 10元无门槛券
手把手带您无忧上云