Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

JavaScript Reverse String Code Challenge

หนึ่งในความท้าทายด้านโค้ด/อัลกอริทึมแรกๆ ที่เราตั้งเป้าไว้เพื่อแก้ไขในฐานะวิศวกรซอฟต์แวร์รุ่นเยาว์และนักพัฒนาเว็บคือการดูว่าเราสามารถหาวิธีย้อนกลับสตริงได้หรือไม่ โปรดจำไว้ว่าสตริงเป็นเพียงชุดของอักขระและช่องว่าง สิ่งที่เราต้องทำคือพยายามย้อนกลับ เช่น สตริง “Hello World!” และส่งคืน “!dlroW olleH” มีหลายวิธีในการแก้ปัญหานี้ และเราจะพูดถึงสองสามวิธีในบทความนี้

การเตือน

เขียนฟังก์ชัน reverseString ที่กลับสตริงและส่งคืน สตริงที่จะย้อนกลับจะได้รับเป็นอาร์กิวเมนต์ในฟังก์ชัน

โซลูชัน # 1:สำหรับลูป

วิธีแรกและอาจเป็นหนึ่งในวิธีแก้ปัญหาที่ตรงไปตรงมาที่สุดคือการใช้ for loop และย้อนกลับผ่านสตริง เราจะต้องยกตัวอย่างหรือสร้างตัวแปรที่เก็บสตริงที่ย้อนกลับใหม่เมื่อเราส่งอักขระแต่ละตัวในสตริง:

function reverseString(str) {
               let newStr = '';
               for(let i = str.length - 1; i >= 0; i--) {
                   newStr += str[i];
               }
               return newStr;
           }

เรามอบหมาย ฉัน ไปยังดัชนีสุดท้าย (ซึ่งจะหาได้เมื่อเราเอา 1 จากความยาวของสตริง) ⇒ นี่คือ การเริ่มต้น ของเรา และจะทำหน้าที่เป็นดัชนีแรกที่เราวนซ้ำ ส่วนที่สองของ for loop คือ condition . ของเรา สิ่งนี้จะบอกวงเมื่อจะหยุด ส่วนที่สามและสุดท้ายของ for loop คือจำนวนที่ฉันจะ เพิ่มขึ้น หลังจากวนซ้ำเสร็จแล้วเงื่อนไขยังคงเป็นจริง :i– โดยพื้นฐานแล้วใช้ i ของเราและกำหนดใหม่เป็น i – 1;

ขณะที่เราวนซ้ำแต่ละครั้ง เราจะนำอักขระแต่ละตัวที่ str[i] และเพิ่มลงใน newStr จากนั้นเราส่งคืน newStr นอก for loop ของเราและยุติฟังก์ชัน

ลองด้วยตัวคุณเองในโปรแกรมแก้ไขโค้ด:

<!DOCTYPE html>
<html>
   <head>
       <meta charset="utf-8" />
       <meta http-equiv="X-UA-Compatible" content="IE=edge" />
       <title></title>
       <meta name="description" content="" />
       <meta name="viewport" content="width=device-width, initial-scale=1" />
       <link rel="stylesheet" href="" />
       <script>
           function reverseString(str) {
               let newStr = '';
               for(let i = str.length - 1; i >= 0; i--) {
                   newStr += str[i];
               }
               return newStr;
           }
           function showInput(e) {
               e.preventDefault();
               const inputStr = document.getElementById('user_input').value;
               if(inputStr.length < 1) {
                   alert("Must enter a string to reverse. Try again.")
               }
               let reversed = reverseString(inputStr);
 
               document.getElementById(
                   'display'
               ).innerHTML = reversed;
               document.getElementById('user_input').value = '';
           }
       </script>
       <style>
           * {
               box-sizing: border-box;;
           }
           body {
               width: 100%;
               max-width: 500px;
               height: 100vh;
               background: lightblue;
               margin: 0 auto;
               display: flex;
               flex-flow: column wrap;
               align-items: center;
               justify-content: center;
           }
           div {
               display: flex;
               flex-flow: column wrap;
               align-items: flex-start;
               width: 100%;
           }
           form {
               display: flex;
               flex-flow: column wrap;
               width: 100%;
               background: lightgray;
               padding: 20px;
               border: 5px double slategray;
 
 
           }
           #user_input {
               width: 100%;
           }
           #submit_button {
               width: 25%;
               align-self: flex-end;
               margin-top: 10px;
           }
           #display {
               font-size: 1.4rem;
               height: 50px;
           }
       </style>
   </head>
   <body>
       <div>
           <form onsubmit="showInput(event);">
               <label id="label">Enter a String to Reverse:</label>
               <input type="text" name="message" id="user_input"/>
               <input type="submit" onclick="showInput(event);" id="submit_button"/><br />
               <label>Your input: </label>
               <p><span id="display"></span></p>
           </form>
          
          
       </div>
   </body>
</html>

โซลูชัน # 2:วิธีการแมป ES6 ของ JavaScript

JavaScript มีเมธอดอาร์เรย์ในตัวที่ใหม่เอี่ยมสำหรับ ES6 ที่เรียกว่า แผนที่ . สิ่งนี้ทำคือส่งคืนอาร์เรย์ใหม่ด้วยค่าที่ระบุ วิธีการแผนที่มีสามพารามิเตอร์:รายการปัจจุบัน ดัชนีของรายการ และสำเนาของอาร์เรย์ที่มันมาจาก เราจะใช้สองพารามิเตอร์สุดท้ายในโซลูชัน

สิ่งแรกที่เราต้องทำคือแบ่งสตริงออกเป็นอาร์เรย์โดยใช้ split() กระบวนการ. ถ้าเราแยกสตริงว่าง เมธอดจะให้อาร์เรย์ที่มีอักขระแต่ละตัวอยู่ในนั้น จากนั้นเราใช้อาร์เรย์ใหม่นั้นเพื่อทำแผนที่

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

function reverseString(str) {
               let newArr = str.split('');
               let rev = newArr.map((letter, index, array) => {
                   let swapIndex = array.length - index - 1;
                   return array[swapIndex];
               });
               return rev.join('')
           }

เนื่องจากเราต้องการสลับดัชนีเป็นหลัก เราจึงต้องหาดัชนีของอักขระที่เราต้องการใส่ในตำแหน่งของดัชนีปัจจุบัน นั่นจะเป็นตัวละครที่เรากลับมา

ในการทำเช่นนั้น เราหาความยาวของอาร์เรย์ ลบหนึ่งเพราะเราเป็นอาร์เรย์ที่ไม่มีฐาน จากนั้นจึงนำตำแหน่งของดัชนีปัจจุบันออกไป อาร์เรย์[swapIndex] ที่เราส่งคืนโดยพื้นฐานแล้วจะแทนที่ดัชนีปัจจุบัน สิ่งนี้ทำให้เรามีอาร์เรย์ของอักขระที่ย้อนกลับในสตริง

สิ่งสุดท้ายที่เราต้องทำคือการรวมอาร์เรย์เข้าด้วยกันเป็นสตริงแล้วส่งคืน

ทดสอบโซลูชันในตัวแก้ไขโค้ด!

<!DOCTYPE html>
<html>
   <head>
       <meta charset="utf-8" />
       <meta http-equiv="X-UA-Compatible" content="IE=edge" />
       <title></title>
       <meta name="description" content="" />
       <meta name="viewport" content="width=device-width, initial-scale=1" />
       <link rel="stylesheet" href="" />
       <script>
           function reverseString(str) {
               let newArr = str.split('');
               let rev = newArr.map((letter, index, array) => {
                   let newIndex = array.length - index - 1;
                   return array[newIndex];
               });
               return rev.join('')
           }
           function showInput(e) {
               e.preventDefault();
               const inputStr = document.getElementById('user_input').value;
               if(inputStr.length < 1) {
                   alert("Must enter a string to reverse. Try again.")
               }
               let reversed = reverseString(inputStr);
 
               document.getElementById(
                   'display'
               ).innerHTML = reversed;
               document.getElementById('user_input').value = '';
           }
       </script>
       <style>
           * {
               box-sizing: border-box;;
           }
           body {
               width: 100%;
               max-width: 500px;
               height: 100vh;
               background: lightblue;
               margin: 0 auto;
               display: flex;
               flex-flow: column wrap;
               align-items: center;
               justify-content: center;
           }
           div {
               display: flex;
               flex-flow: column wrap;
               align-items: flex-start;
               width: 100%;
           }
           form {
               display: flex;
               flex-flow: column wrap;
               width: 100%;
               background: lightgray;
               padding: 20px;
               border: 5px double slategray;
 
 
           }
           #user_input {
               width: 100%;
           }
           #submit_button {
               width: 25%;
               align-self: flex-end;
               margin-top: 10px;
           }
           #display {
               font-size: 1.4rem;
               height: 50px;
           }
       </style>
   </head>
   <body>
       <div>
           <form onsubmit="showInput(event);">
               <label id="label">Enter a String to Reverse:</label>
               <input type="text" name="message" id="user_input"/>
               <input type="submit" onclick="showInput(event);" id="submit_button"/><br />
               <label>Your input: </label>
               <p><span id="display"></span></p>
           </form>
          
          
       </div>
   </body>
</html>

สิ่งสำคัญที่ต้องจำไว้คือแผนที่จะคืนค่าอาร์เรย์ใหม่ ดังนั้นเราจึงไม่ได้แก้ไข str/array เดิมที่ส่งผ่านเข้ามา

โซลูชัน #3:เมธอด JavaScript ในตัว

วิธีการแก้ปัญหาโค้ดนี้ใช้ฟังก์ชัน/เมธอดในตัว split() , reverse() และ join() เพื่อแก้ปัญหาในซับเดียวนี้:

function reverseString(str) {
               return str.split('').reverse().join('');
           }

ลองรันโค้ดด้านล่างและทดสอบด้วยตัวคุณเองว่าใช้งานได้จริง!

<!DOCTYPE html>
<html>
   <head>
       <meta charset="utf-8" />
       <meta http-equiv="X-UA-Compatible" content="IE=edge" />
       <title></title>
       <meta name="description" content="" />
       <meta name="viewport" content="width=device-width, initial-scale=1" />
       <link rel="stylesheet" href="" />
       <script>
           function reverseString(str) {
               return str.split('').reverse().join('');
           }
           function showInput(e) {
               e.preventDefault();
               const inputStr = document.getElementById('user_input').value;
               if(inputStr.length < 1) {
                   alert("Must enter a string to reverse. Try again.")
               }
               let reversed = reverseString(inputStr);
 
               document.getElementById(
                   'display'
               ).innerHTML = reversed;
               document.getElementById('user_input').value = '';
           }
       </script>
       <style>
           * {
               box-sizing: border-box;;
           }
           body {
               width: 100%;
               max-width: 500px;
               height: 100vh;
               background: lightblue;
               margin: 0 auto;
               display: flex;
               flex-flow: column wrap;
               align-items: center;
               justify-content: center;
           }
           div {
               display: flex;
               flex-flow: column wrap;
               align-items: flex-start;
               width: 100%;
           }
           form {
               display: flex;
               flex-flow: column wrap;
               width: 100%;
               background: lightgray;
               padding: 20px;
               border: 5px double slategray;
 
 
           }
           #user_input {
               width: 100%;
           }
           #submit_button {
               width: 25%;
               align-self: flex-end;
               margin-top: 10px;
           }
           #display {
               font-size: 1.4rem;
               height: 50px;
           }
       </style>
   </head>
   <body>
       <div>
           <form onsubmit="showInput(event);">
               <label id="label">Enter a String to Reverse:</label>
               <input type="text" name="message" id="user_input"/>
               <input type="submit" onclick="showInput(event);" id="submit_button"/><br />
               <label>Your input: </label>
               <p><span id="display"></span></p>
           </form>
          
          
       </div>
   </body>
</html>

โดยพื้นฐานแล้วสิ่งที่ในตัว reverse() วิธีการทำคือ map() วิธีการ (วิธีการที่เราสรุปไว้ในโซลูชันก่อนหน้านี้) ภายใต้ประทุน; อย่างไรก็ตาม มันเปลี่ยนอาร์เรย์เดิมแทนที่จะส่งคืนอาร์เรย์ใหม่เนื่องจากจะกลับ ในตำแหน่ง . หากคุณกำลังแก้ปัญหาที่ใหญ่กว่า คุณอาจต้องสร้างสำเนาของอาร์เรย์ต้นฉบับ เพื่อให้คุณยังคงสามารถเข้าถึงต้นฉบับได้หากต้องการ

สิ่งเหล่านี้ไม่ใช่วิธีแก้ปัญหาที่ชัดเจนเพียงวิธีเดียว – นี่เป็นเพียงวิธีแก้ปัญหายอดนิยมบางส่วนเท่านั้น ทดลองและดูว่าคุณสามารถหาวิธีแก้ปัญหาอื่นๆ สำหรับตัวคุณเองในโปรแกรมแก้ไขโค้ดด้านบนได้หรือไม่ เพียงแก้ไข reverseString() ฟังก์ชั่นและไม่มีอะไรอื่นหากคุณต้องการเห็นบนหน้าจอ