用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/zh-tw/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

發表回復

登錄後才能評論