面试题答案
一键面试实现思路
- 遍历嵌套数组中的每个对象。
- 对于每个对象,递归地遍历其属性(如果属性也是对象),找到特定属性并累加其值。
关键代码示例(以JavaScript为例)
function sumNestedProperty(data, targetProp) {
let sum = 0;
function traverse(obj) {
for (let key in obj) {
if (typeof obj[key] === 'object') {
traverse(obj[key]);
} else if (key === targetProp) {
sum += obj[key];
}
}
}
data.forEach(item => traverse(item));
return sum;
}
// 示例数据
const nestedData = [
{
prop1: 10,
subObj: {
targetProp: 5
}
},
{
targetProp: 3,
subObj: {
nestedProp: 2
}
}
];
const sum = sumNestedProperty(nestedData, 'targetProp');
console.log(sum);
解释
sumNestedProperty
函数接收嵌套数据结构data
和目标属性名targetProp
。traverse
函数递归遍历对象的属性。如果属性是对象,就继续递归调用traverse
;如果属性名与目标属性名相同,就将其值累加到sum
中。- 外层
forEach
遍历数组中的每个对象,调用traverse
函数进行属性遍历和累加。 - 最后返回累加的结果。
不同编程语言实现思路类似,但语法会有所不同,例如Python代码如下:
def sum_nested_property(data, target_prop):
def traverse(obj):
nonlocal total_sum
for key, value in obj.items():
if isinstance(value, dict):
traverse(value)
elif key == target_prop:
total_sum += value
total_sum = 0
for item in data:
traverse(item)
return total_sum
nested_data = [
{
'prop1': 10,
'subObj': {
'targetProp': 5
}
},
{
'targetProp': 3,
'subObj': {
'nestedProp': 2
}
}
]
total = sum_nested_property(nested_data, 'targetProp')
print(total)
在Python中,使用 nonlocal
声明来修改外层函数的变量 total_sum
,函数逻辑和JavaScript类似,都是递归遍历嵌套结构并累加目标属性值。