一道JS 面试题
2016-03-23 10:26
295 查看
打印表头
小明正在用JavaScript写一个日志分析程序。该程序会将日志转化为CSV文件,以便在Excel等应用中加载为一个表格。现在他在生成表头上遇到了困难。他需要实现如下一个方法:
function printLine(array) { console.log(array.join(",")); } function printHeader(obj) { /* 使用 printLine 输出内容*/ }
输入
小明获取一个对象,需要根据这个对象的结构生成表头。例如:{ Process: { CpuUsage: 0 VirtualMemory: 0, PrivateMemory: 0 }, Subscriptions: { Order: { TotalCount: 0, LastMinute: 0, Failed: 0 }, User: { TotalCount: 0 LastMinute: 0 } } }
由于表头仅和对象结构相关,因此无需关注字段的值。
输出
输出为一行至多行文本,为CSV格式,字段之间以逗号隔开(简化问题起见,字段本身不包含逗号)。如上输入,则需要得到以下输出:
Process,,,Subscriptions CpuUsage,VirtualMemory,PrivateMemory,Order,,,User ,,,TotalCount,LastMinute,Failed,TotalCount,LastMinute
该CSV文件内容使用Excel打开便会得到以下表格(请忽略格式):
Process | Subscriptions | ||||||
CpuUsage | VirtualMemory | PrivateMemory | Order | User | |||
TotalCount | LastMinute | Failed | TotalCount | LastMinute |
思路分析:
https://gist.github.com/JeffreyZhao/d131293c3f7db2e552c6
<script type="text/javascript"> function printLine(array) { console.log(array.join(',')) } function printHeader(obj) { var header = []; var count = 0; function cal(object, depth) { if(typeof object !== 'object') { count += 1; return; } if(header[depth] === undefined) { header[depth] = []; } for(var key in object) { header[depth][count] = key; cal(object[key], depth + 1); } } cal(obj, 0); for(var index in header) { printLine(header[index]); } } var obj = { Process: { CpuUsage: 0, VirtualMemory: 0, PrivateMemory: 0 }, Subscriptions: { Order: { TotalCount: 0, LastMinute: 0, Failed: 0 }, User: { TotalCount: 0, LastMinute: 0 } } }; printHeader(obj) </script>