用JS打印正三角形

JS是一种重要的编程语言,在前端开发中发挥着重要的作用,它能够实现很多有趣的功能。在本篇文章中,我们将讨论如何用JS打印正三角形。正三角形拥有良好的美学效果,在网页设计中经常被使用。

一、基础方法

function printTriangle(height) {
  let row = '';
  for (let i = 1; i <= height; i++) {
    row += '*';
    console.log(row);
  }
}

printTriangle(5);

这是最基本的打印正三角形的方法。该方法使用了一个for循环,以累加星号构成正三角形。

首先定义一个长度为0的字符串,该字符串用来存储星号。然后,使用for循环从1到height,每次将一个星号添加到row字符串中。每次循环后,调用console.log()方法打印出row字符串。

我们调用了printTriangle()函数,并将5作为参数传入,该函数将会打印一个有5行的正三角形:

*
**
***
****
*****

二、增强方法

function printTriangleEnhanced(height) {
  const TOTAL_WIDTH = height * 2 - 1;
  let row = '';
  for (let i = 1; i <= height; i++) {
    row += '*';
    const ROW_WIDTH = i * 2 - 1;
    const PADDING = Math.floor((TOTAL_WIDTH - ROW_WIDTH) / 2);
    console.log(' '.repeat(PADDING) + row + ' '.repeat(PADDING));
  }
}

printTriangleEnhanced(5);

在增强版中,我们优化了代码,使其更灵活、更健壮,并打印了带有空格的三角形,让其更美观。

为了使得三角形居中,我们定义了一个名为TOTAL_WIDTH的常量来表示三角形的总宽度,即height×2-1。在for循环中,我们通过ROW_WIDTH变量计算出当前行的宽度,即i×2-1。我们再使用PADDING变量来补足每行前面的空格,确保三角形居中。

我们调用了printTriangleEnhanced()函数,并将5作为参数传入,该函数将会打印一个有5行的正三角形:

    *
   ***
  *****
 *******
*********

三、利用ES6特性

function printTriangleES6(height) {
  const TOTAL_WIDTH = height * 2 - 1;
  [...Array(height)].forEach((_, i) => {
    const ROW_WIDTH = i * 2 + 1;
    const PADDING = Math.floor((TOTAL_WIDTH - ROW_WIDTH) / 2);
    console.log(' '.repeat(PADDING) + '*'.repeat(ROW_WIDTH) + ' '.repeat(PADDING));
  });
}

printTriangleES6(5);

在ES6中,我们可以使用更加简洁的方式来实现同样的功能。

首先,我们使用[…Array(height)]方法创建一个长度为height的数组,并使用forEach()方法遍历数组并执行操作。在此过程中不需要定义一个变量,所以我们用一个下划线’_ ‘来占位。

接下来,我们通过ROW_WIDTH变量计算出当前行的宽度,使用repeat()方法构造星号行,再使用repeat()方法构造空格行,最后拼接这两个字符串并打印出来即可。

我们调用了printTriangleES6()函数,并将5作为参数传入,该函数将会打印一个有5行的正三角形:

    *
   ***
  *****
 *******
*********

四、使用递归

function printTriangleRecursive(height, currentRow = 1, row = '') {
  if (currentRow > height) return;
  row += '*';
  console.log(row);
  printTriangleRecursive(height, currentRow + 1, row);
}

printTriangleRecursive(5);

递归是另一种实现打印正三角形的方法,可以很好地展示JS的强大之处。

在递归方法中,我们定义了height、currentRow和row 3个参数,其中currentRow和row都是可选的。

每次调用printTriangleRecursive()方法时,都会将currentRow加1,并将row添加一个星号。如果currentRow还没有达到height,那么该函数就会继续调用自身,直到currentRow等于height为止。

我们调用了printTriangleRecursive()函数,并将5作为参数传入,该函数将会打印一个有5行的正三角形:

*
**
***
****
*****

五、使用生成器

function* generateTriangle(height, row = '') {
  while (height--) {
    row += '*';
    yield `${row}\n`;
  }
}

for (let row of generateTriangle(5)) {
  console.log(row);
}

JavaScript中的生成器使得打印正三角形变得非常简单。

在generateTriangle()函数中,我们定义了一个名为row的空字符串,以及height参数。在while循环中,每次执行都会将height减一,直到height为0为止。在循环中,我们再将row添加星号并使用yield关键字将构成好的字符串传出去。

在for循环中,我们使用generateTriangle()函数创建一个生成器。随着每次迭代,我们都会获得一个新的星号行字符串并打印它。

我们调用了generateTriangle()函数,并将5作为参数传入,该函数将会打印一个有5行的正三角形:

*
**
***
****
*****

结语

在本文中,我们介绍了不同的方法来用JS打印正三角形。无论你是想使用最基本的知识,还是想挑战更高级的技术,都有相应的方法供你参考。这些方法都有自己独特的优点,相信你会在日常开发中受益匪浅。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:09
下一篇 2024-12-12 13:09

相关推荐

  • JS Proxy(array)用法介绍

    JS Proxy(array)可以说是ES6中非常重要的一个特性,它可以代理一个数组,监听数据变化并进行拦截、处理。在实际开发中,使用Proxy(array)可以方便地实现数据的监…

    编程 2025-04-29
  • 解析js base64并转成unit

    本文将从多个方面详细介绍js中如何解析base64编码并转成unit格式。 一、base64编码解析 在JavaScript中解析base64编码可以使用atob()函数,它会将b…

    编程 2025-04-29
  • Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的解决方法

    本文将解决Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的问题。同时,给出一些相关示例代码,以帮助读者更好的理解并处理这个问题。 一、问题解…

    编程 2025-04-29
  • t3.js:一个全能的JavaScript动态文本替换工具

    t3.js是一个非常流行的JavaScript动态文本替换工具,它是一个轻量级库,能够很容易地实现文本内容的递增、递减、替换、切换以及其他各种操作。在本文中,我们将从多个方面探讨t…

    编程 2025-04-28
  • JS图片沿着SVG路径移动实现方法

    本文将为大家详细介绍如何使用JS实现图片沿着SVG路径移动的效果,包括路径制作、路径效果、以及实现代码等内容。 一、路径制作 路径的制作,我们需要使用到SVG,SVG是可缩放矢量图…

    编程 2025-04-27
  • 如何使用JS调用Python脚本

    本文将详细介绍通过JS调用Python脚本的方法,包括使用Node.js、Python shell、child_process等三种方法,以及在Web应用中的应用。 一、使用Nod…

    编程 2025-04-27
  • 如何反混淆美团slider.js

    本文将从多个方面详细阐述如何反混淆美团slider.js。在开始之前,需要明确的是,混淆是一种保护JavaScript代码的方法,其目的是使代码难以理解和修改。因此,在进行反混淆操…

    编程 2025-04-27
  • Python要学JS吗?

    Python和JavaScript都是非常受欢迎的编程语言。然而,你可能会问,既然我已经学了Python,是不是也需要学一下JS呢?在本文中,我们将围绕这个问题进行讨论,并从多个角…

    编程 2025-04-27
  • 解决js ajax post 419问题

    对于使用ajax post请求时出现的419问题,我们需要进行以下几个方面的阐述,包括返回码的含义、可能出现的情况、解决方案等内容。 一、解析419返回码 419返回码表示用户超时…

    编程 2025-04-27
  • Three.js实现室内模型行走

    在本文中,将介绍如何使用Three.js创建室内模型,并在场景中实现行走。为了实现这一目标,需要完成以下任务: 加载室内模型及材质贴图 实现摄像机控制,支持用户自由行走 添加光源,…

    编程 2025-04-25

发表回复

登录后才能评论