您的位置:首页 > 职场人生

一道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    
CpuUsageVirtualMemoryPrivateMemoryOrder  User 
   TotalCountLastMinuteFailedTotalCountLastMinute
总而言之,是将对象结构转化为如上表头。

思路分析:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: