面试题答案
一键面试实现思路
- 使用泛型来处理不同类型的复杂数据结构,这样函数可以适用于各种嵌套对象数组。
- 利用TypeScript的类型断言来在遍历过程中判断属性的类型,以便正确提取数字。
- 递归地遍历嵌套结构,当遇到数组属性时,继续递归处理数组中的元素。
- 收集所有数字类型的值,最后进行计算(这里是求平均值)。
代码实现
function extractAndCalculate<T>(data: T): number | undefined {
let numbers: number[] = [];
function traverse(obj: any) {
if (Array.isArray(obj)) {
obj.forEach((item) => traverse(item));
} else if (typeof obj === 'object' && obj!== null) {
for (let key in obj) {
traverse(obj[key]);
}
} else if (typeof obj === 'number') {
numbers.push(obj);
}
}
traverse(data);
if (numbers.length === 0) {
return undefined;
}
return numbers.reduce((acc, num) => acc + num, 0) / numbers.length;
}
你可以这样调用这个函数:
const complexData = [
{
id: 1,
name: 'test',
values: [1, 2, 3],
subObject: {
subValue: 4
}
},
{
id: 2,
name: 'test2',
values: ['a', 5, 'b']
}
];
const average = extractAndCalculate(complexData);
console.log(average);