ASCII表,其中域可以有换行符 [英] ASCII table where field can have newlines
本文介绍了ASCII表,其中域可以有换行符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下功能可显示ASCII表
函数ascii_table(数组,标题){
如果(!array.length){
返回'';
}
VAR长度=阵列[0] .MAP(函数(_,I){
VAR COL = array.map(函数(行){
如果(行[I]!=未定义){
返回行[I]。长度;
}其他{
返回0;
}
});
返回Math.max.apply(数学,列);
});
阵列= array.map(函数(行){
返回'| '+ row.map(功能(项目一){
VAR大小= item.length;
如果(大小<长度[I]){
项目+ =新阵列(长度[I] -size + 1)。加入('');
}
归还物品;
})加入('|')+'|';
});
VAR月='+'+ lengths.map(功能(长){
返回新的Array(长+ 3)。加入(' - ');
})加入('+')+'+';
如果(标题){
返回九月+的'\\ n'+阵列[0] +'\\ n'+月+的'\\ n'+
array.slice(1)。加入('\\ n')+'\\ n'+年9月;
}其他{
返回九月+的'\\ n'+ array.join('\\ n')+'\\ n'+年9月;
}
}
问题是,当细胞包含新行我最终是这样的:
<$c$c>+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
|日期|尼克|电子邮件| WWW |评论| IP |头像|
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| 2016年1月27日21时11分十秒|斯特凡|卡内夫| | dsfdsfsd
sdfsdf
sdfsdf
sdfdsf | 1308240552 |化身/为Default.png |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
我应该我在功能改变,产生这样的结果:
<$c$c>+---------------------+--------+-------+-----+----------+------------+---------------------+
|日期|尼克|电子邮件| WWW |评论| IP |头像|
+ --------------------- + -------- + ------- + ----- + ---- ------ + ------------ + --------------------- +
| 2016年1月27日21时11分十秒|斯特凡|卡内夫| | dsfdsfsd | 1308240552 |化身/为Default.png |
| | | | | sdfsdf | | |
| | | | | sdfsdf | | |
| | | | | sdfdsf | | |
+ --------------------- + -------- + ------- + ----- + ---- ------ + ------------ + --------------------- +
解决方案
您可以修改表和渲染之前之前添加新行到表:
函数ascii_table(数组,标题){
如果(!array.length){
返回'';
} //添加
对于(VAR I = array.length - 1; I&GT; = 0;我 - ){
VAR排阵= [I]
变种堆栈= [];
对于(VAR J = 0; J&LT; row.length; J ++){
VAR换行=行[J] .split(\\ n);
行[J] = newLines.shift();
stacks.push(新行);
}
VAR newRowsCount = stacks.reduce(功能(A,B){
返回则为a.length&GT; b.length个? A:B;
})。长度;
对于(VAR K = newRowsCount - 1; K&GT; = 0; K--){
方法Array.splice第(i + 1,0,stacks.map(功能(stackColumn){
返回stackColumn [K] || ;
}));
}
}
//添加 VAR长度=阵列[0] .MAP(函数(_,I){
VAR COL = array.map(函数(行){
如果(行[I]!=未定义){
返回行[I]。长度;
}其他{
返回0;
}
});
返回Math.max.apply(数学,列);
});
阵列= array.map(函数(行){
返回'| '+ row.map(功能(项目一){
VAR大小= item.length;
如果(大小&LT;长度[I]){
项目+ =新阵列(长度[I] - 大小+ 1)。加入('');
}
归还物品;
})加入('|')+'|';
});
VAR月='+'+ lengths.map(功能(长){
返回新的Array(长+ 3)。加入(' - ');
})加入('+')+'+';
如果(标题){
返回九月+的'\\ n'+阵列[0] +'\\ n'+月+的'\\ n'+
array.slice(1)。加入('\\ n')+'\\ n'+年9月;
}其他{
返回九月+的'\\ n'+ array.join('\\ n')+'\\ n'+年9月;
}
}
输出:
<$p$p><$c$c>+---------------------+------+--------+-----+------------------+------------+---------------------+|日期|尼克|电子邮件| WWW |评论| IP |头像|
+ --------------------- + ------ + -------- + ----- + ----- ------------- + ------------ + --------------------- +
| 2016年1月28日十一点40分59秒|笑|哈哈// @罗| | NOCOMMENT | 1844311719 |化身/为Default.png |
| | | l.fr | |笑| | |
| | | | |笑| | |
| | | | |笑| | |
| 2016年1月10日15时十三分59秒| EHS |什么| |恩特RM评论。 | 1423172924 |化身/为Default.png |
+ --------------------- + ------ + -------- + ----- + ----- ------------- + ------------ + --------------------- +
(增加了一个新行一个电子邮件的细胞,以测试在多个列的新行)。
I have following function that display ASCII table
function ascii_table(array, header) {
if (!array.length) {
return '';
}
var lengths = array[0].map(function(_, i) {
var col = array.map(function(row) {
if (row[i] != undefined) {
return row[i].length;
} else {
return 0;
}
});
return Math.max.apply(Math, col);
});
array = array.map(function(row) {
return '| ' + row.map(function(item, i) {
var size = item.length;
if (size < lengths[i]) {
item += new Array(lengths[i]-size+1).join(' ');
}
return item;
}).join(' | ') + ' |';
});
var sep = '+' + lengths.map(function(length) {
return new Array(length+3).join('-');
}).join('+') + '+';
if (header) {
return sep + '\n' + array[0] + '\n' + sep + '\n' +
array.slice(1).join('\n') + '\n' + sep;
} else {
return sep + '\n' + array.join('\n') + '\n' + sep;
}
}
the problem is when the cell contain new line I end up with something like this:
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| date | nick | email | www | comment | ip | avatar |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
| 2016-01-27 21:11:10 | stefan | kanev | | dsfdsfsd
sdfsdf
sdfsdf
sdfdsf | 1308240552 | avatars/default.png |
+---------------------+--------+-------+-----+-------------------------------+------------+---------------------+
What should I change in my function to produce the result like this:
+---------------------+--------+-------+-----+----------+------------+---------------------+
| date | nick | email | www | comment | ip | avatar |
+---------------------+--------+-------+-----+----------+------------+---------------------+
| 2016-01-27 21:11:10 | stefan | kanev | | dsfdsfsd | 1308240552 | avatars/default.png |
| | | | | sdfsdf | | |
| | | | | sdfsdf | | |
| | | | | sdfdsf | | |
+---------------------+--------+-------+-----+----------+------------+---------------------+
解决方案
You could modify the table and add the new rows to the table before before rendering it:
function ascii_table(array, header) {
if (!array.length) {
return '';
}
//added
for (var i = array.length - 1; i >= 0; i--) {
var row = array[i];
var stacks = [];
for (var j = 0; j < row.length; j++) {
var newLines = row[j].split("\n");
row[j] = newLines.shift();
stacks.push(newLines);
}
var newRowsCount = stacks.reduce(function(a, b) {
return a.length > b.length ? a : b;
}).length;
for (var k = newRowsCount - 1; k >= 0; k--) {
array.splice(i + 1, 0, stacks.map(function(stackColumn) {
return stackColumn[k] || "";
}));
}
}
//added
var lengths = array[0].map(function(_, i) {
var col = array.map(function(row) {
if (row[i] != undefined) {
return row[i].length;
} else {
return 0;
}
});
return Math.max.apply(Math, col);
});
array = array.map(function(row) {
return '| ' + row.map(function(item, i) {
var size = item.length;
if (size < lengths[i]) {
item += new Array(lengths[i] - size + 1).join(' ');
}
return item;
}).join(' | ') + ' |';
});
var sep = '+' + lengths.map(function(length) {
return new Array(length + 3).join('-');
}).join('+') + '+';
if (header) {
return sep + '\n' + array[0] + '\n' + sep + '\n' +
array.slice(1).join('\n') + '\n' + sep;
} else {
return sep + '\n' + array.join('\n') + '\n' + sep;
}
}
Output:
+---------------------+------+--------+-----+------------------+------------+---------------------+
| date | nick | email | www | comment | ip | avatar |
+---------------------+------+--------+-----+------------------+------------+---------------------+
| 2016-01-28 11:40:59 | lol | lol@lo | | nocomment | 1844311719 | avatars/default.png |
| | | l.fr | | lol | | |
| | | | | lol | | |
| | | | | lol | | |
| 2016-01-10 15:13:59 | ehs | what | | ente rm comment. | 1423172924 | avatars/default.png |
+---------------------+------+--------+-----+------------------+------------+---------------------+
(Added a new line in one email cell, to test new lines in multiple columns).
这篇关于ASCII表,其中域可以有换行符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文