JS实现古诗竖排从右至左

一个老题目,将下面古诗文由横排,变成古文竖排模式:

静夜思 李白
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。

变成:

低|举|疑|床|静
头|头|似|前|夜
思|望|地|明|思
故|明|上|月| 
乡|月|霜|光|李
。|,|。|,|白

1.原始文本转成二维数组,简化起见,暂时去掉标点符号和标题作者:

console.log("床前明月光\n疑似地上霜\n举头望明月\n低头思故乡".split(/\n/).map( v => v.split(''))
);

输出:

[[ '床', '前', '明', '月', '光' ],[ '疑', '似', '地', '上', '霜' ],[ '举', '头', '望', '明', '月' ],[ '低', '头', '思', '故', '乡' ]
]

直接一行行输出的时候,就是横排输出,变成竖排,刚好是行列互换,在二维数组、矩阵中,就是矩阵转置transpose,4x5的矩阵行列互换后,变成5x4,现在要实现一个transpose函数:

let arr = [[1, 2, 3],[4, 5, 6]
];
// 取首行,循环每一列,循环列的时候,取对应列的元素变成行返回,如果某行元素不足首行,可以填充空白字符
console.log( arr[0].map((_, col) =>arr.map(row => row[col]))
);

转换后变成:

[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

封装成一个函数:

// tranpose函数实现有很多种,这是最简单一种
let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
console.log( transpose("床前明月光\n疑似地上霜\n举头望明月\n低头思故乡".split(/\n/).map( v => v.split('')))
);

输出:

[[ '床', '疑', '举', '低' ],[ '前', '似', '头', '头' ],[ '明', '地', '望', '思' ],[ '月', '上', '明', '故' ],[ '光', '霜', '月', '乡' ]
]

变成字符串输出:

let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
console.log( transpose("床前明月光\n疑似地上霜\n举头望明月\n低头思故乡".split(/\n/).map( v => v.split(''))).map( row => row.join("|") ).join("\n")
);

输出:

|||低
前|||头
明|||思
月|||故
光|||

现在是从左到右,要变成从右向左,每一行还需要先反转数组:row.reverse()

let transpose = arr => {return arr[0].map((_, col) =>arr.map(row => row[col]));
};
let str = transpose("床前明月光\n疑似地上霜\n举头望明月\n低头思故乡".split(/\n/).map( v => v.split('')))
.map( row => row.reverse().join("|") )
.join("\n");
console.log(str);

输出:

低|举|疑|床
头|头|似|前
思|望|地|明
故|明|上|月
乡|月|霜|光

如果不想定义函数,可以用reduce来实现:

console.log([[1, 2, 3],[4, 5, 6]].reduce((s, a) => (a.map((v, j)=> s[j] = (s[j] || []).concat([v])), s), [])
);

输出:

[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

reduce改写:

let str = '静夜思 李白\n床前明月光,\n疑似地上霜。\n举头望明月,\n低头思故乡。'.split(/\n/)
.map( v => v.split('') )
.reduce((s, a) => (a.map((v, j)=> s[j] = (s[j] || []).concat([v])), s), [])
.map( d => d.reverse().join('|') )
.join('\n');
console.log(str);

输出:

低|举|疑|床|静
头|头|似|前|夜
思|望|地|明|思
故|明|上|月| 
乡|月|霜|光|李
。|,|。|,|白

ruby内置了transpose函数:

# puts "静夜思 李白\n床前明月光,\n疑似地上霜。\n举头望明月,\n低头思故乡。".split(/\n/).map(&:chars).transpose.map{ it.reverse * '|' } * "\n"
# csdn的 ruby 版本过低,上面代码不能正常运行
puts "静夜思 李白\n床前明月光,\n疑似地上霜。\n举头望明月,\n低头思故乡。".split(/\n/).map(&:chars).transpose.map{|it| it.reverse.join('|') }.join("\n")

输出:

低|举|疑|床|静
头|头|似|前|夜
思|望|地|明|思
故|明|上|月| 
乡|月|霜|光|李
。|,|。|,|白

完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Android 中实现支持多手势交互的自定义 View(Kotlin 完整指南)

本文将手把手教你创建一个支持拖动、缩放、旋转等多种手势交互的自定义 View,并提供完整的代码实现和优化建议。 一、基础实现 1.1 创建自定义 View 骨架 import android.content.Context import android.graphics.* import android.util.AttributeSet import an…

Kotlin 协程 (一)

1. Kotlin 协程的核心概念 1.1 协程(Coroutine) 定义:协程是一种轻量级的执行上下文,可以在任何时候挂起和恢复,而不需要阻塞线程。特点: 比传统线程更轻量,开销更小。支持挂起和恢复&#xf…

机器学习 集成学习方法之随机森林

集成学习方法之随机森林 1 集成学习2 随机森林的算法原理2.1 Sklearn API2.2 示例 1 集成学习 机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类…

thinkphp6实现统一监听并记录所有执行的sql语句除查询外

创建文件app/middleware/SqlLogger.php <?php namespace app\middleware;use think\facade\Db; use think\facade\Session;class SqlLogger {public function handle($request, \Closure $next){// 监听所有SQL $request->ip()Db::listen(function($sql, $time) {if (p…

pytorch训练可视化工具---TensorBoard

一、目的&#xff1a;为什么使用 TensorBoard 调控模型 使用 TensorBoard 可以帮我们&#xff1a; 实时查看 loss / acc 曲线 → 判断是否过拟合、欠拟合&#xff1b; 对比不同模型或超参数的效果&#xff1b; 可视化模型结构 → 帮助调试模型设计&#xff1b; 查看权重/梯…

机器学习知识自然语言处理入门

一、引言&#xff1a;当文字遇上数学 —— 自然语言的数字化革命 在自然语言处理&#xff08;NLP&#xff09;的世界里&#xff0c;计算机要理解人类语言&#xff0c;首先需要将文字转化为数学向量。早期的 One-Hot 编码如同给每个词语分配一个唯一的 “房间号”&#xff0c;例…

Linux-线程概念和控制

1.Linux线程概念 1.1什么是线程 • 在⼀个程序⾥的⼀个执⾏路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“⼀个进程内部 的控制序列” • ⼀切进程⾄少都有⼀个执⾏线程 • 线程在进程内部运⾏&#xff0c;本质是在进程地址空间内运⾏…

【氮化镓】低剂量率对GaN HEMT栅极漏电的影响

2024 年 2 月 22 日,中国科学院新疆理化技术研究所的Li等人在《IEEE ACCESS》期刊发表了题为《Degradation Mechanisms of Gate Leakage in GaN-Based HEMTs at Low Dose Rate Irradiation》的文章,基于实验分析和 TCAD 仿真,研究了低剂量率辐照下基于 GaN 的 p 型栅高电子迁…

.NET Core 中 Swagger 配置详解:常用配置与实战技巧

随着微服务架构和 RESTful API 的广泛应用&#xff0c;API 文档的管理和自动化生成成为了开发中的重要部分。Swagger&#xff08;现为 OpenAPI&#xff09;是一款功能强大的工具&#xff0c;它可以自动生成 API 文档&#xff0c;并提供交互式 UI&#xff0c;帮助开发者、测试人…

海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像

做项目的时候&#xff0c;有时候手抖&#xff0c;一不小心把一个成熟稳定的项目的相机配置&#xff0c;重置了&#xff0c;如何进行恢复呢&#xff0c;在不知道之前配置数据的情况下。 我在做项目的时候&#xff0c;为了让这个相机成像稳定一点&#xff0c;尤其是做颜色检测时…

【八股战神篇】Java虚拟机(JVM)高频面试题

目录 专栏简介 一 请解释Java虚拟机(JVM)及其主要功能 延伸 1. JVM的基本概念 2. JVM的主要功能 二 对象创建的过程了解吗 延伸 1.Java 创建对象的四种常见方式 三 什么是双亲委派模型 延伸 1.双亲委派机制的作用: 2.双亲委派模型的核心思想: 3.双亲委派模型的…

win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹

在尝试删除路径为.../bak/sql的文件时&#xff0c;系统提示无权限操作。然而&#xff0c;关闭SQLyog后&#xff0c;删除操作成功完成。这表明SQLyog可能正在占用该文件&#xff0c;导致删除权限受限。关闭SQLyog后&#xff0c;文件被释放&#xff0c;删除操作得以顺利进行。建议…

Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN

简单来讲&#xff0c;Oracle为了高效管理BUFFER CACHE主要使用以下2种LRU列&#xff1a; LRU列&#xff0c;又叫替换列&#xff08;replacement list&#xff09;&#xff0c;其中又分为主列和辅助列。 主列&#xff1a;已使用的缓冲区列&#xff0c;分为HOT和COLD区域。HOT区…

C++:迭代器

迭代器的本质&#xff1a;对象。 迭代器与指针类似&#xff0c;通过迭代器可以指向容器中的某个元素&#xff0c;还可以对元素进行操作。 迭代器统一规范了遍历方式。不同的数据结构可以用统一的方式去遍历。 接下来是一个自定义迭代器的代码示例。 #include<iostream&g…

(4)Java虚拟线程与传统线程对比

虚拟线程与传统线程对比 &#x1f504; &#x1f4cb; 核心问题 Project Loom的虚拟线程与传统线程在资源消耗上有何区别&#xff1f;如何设计一个支持百万级并发的服务&#xff1f; &#x1f4ca; 资源消耗比较 &#x1f418; 传统线程 &#x1f4cf; 每线程约1MB栈空间&am…

Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?

Java 单元测试框架比较&#xff1a;JUnit、TestNG 哪个更适合你&#xff1f; 在 Java 开发领域&#xff0c;单元测试是保证代码质量的重要环节。而选择一个合适的单元测试框架&#xff0c;对于提升测试效率和代码可靠性至关重要。本文将深入比较 JUnit 和 TestNG 这两个主流的…

从零开始的抽奖系统创作(2)

我们接着进行抽奖系统的完善。 前面我们完成了 1.结构初始化&#xff08;统一结果返回之类的&#xff0c;还有包的分类&#xff09; 2.加密&#xff08;基于Hutool进行的对称与非对称加密&#xff09; 3.用户注册 接下来我们先完善一下结构&#xff08;统一异常处理&#…

【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布

1. vs2022打开运行原sql Server的C#窗体项目更改为mysql数据库 1.1. vs2022安装基础模块即可 安装1️⃣vs核心编辑器2️⃣.net桌面开发必选&#xff0c;可选均不安装&#xff01;&#xff01;&#xff01; 为了成功连接mysql数据库&#xff0c;需要安装组件NuGet包管理器 安…

AI 编程 “幻觉” 风险频发?飞算 JavaAI 硬核技术筑牢安全防线

AI 技术已深度融入编程领域&#xff0c;为开发者带来前所未有的便利与效率提升。然而&#xff0c;AI 编程 “幻觉” 问题如影随形&#xff0c;频频引发困扰&#xff0c;成为阻碍行业稳健发展的潜在风险。飞算 JavaAI 凭借一系列硬核技术&#xff0c;强势出击&#xff0c;为攻克…

数据库----软考中级软件设计师(自用学习笔记)

目录 1、E-R图 2、结构数据模型 3、数据库的三级模式结构 4、关系代数 5、查询 6、SQL控制语句 7、视图​编辑 8、索引 9、关系模式 10、函数依赖 11、通过闭包求候选码 12、范式 13、无损连接和保持函数依赖 14、数据库设计 15、数据库的控制功能 16、数据库…