一道JS 面试题

本文介绍了一个使用JavaScript编写的CSV表头生成器。该生成器能够根据输入的对象结构自动生成多级表头,并以CSV格式输出,便于进一步的数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打印表头

小明正在用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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值