หนึ่งในความท้าทายด้านโค้ด/อัลกอริทึมแรกๆ ที่เราตั้งเป้าไว้เพื่อแก้ไขในฐานะวิศวกรซอฟต์แวร์รุ่นเยาว์และนักพัฒนาเว็บคือการดูว่าเราสามารถหาวิธีย้อนกลับสตริงได้หรือไม่ โปรดจำไว้ว่าสตริงเป็นเพียงชุดของอักขระและช่องว่าง สิ่งที่เราต้องทำคือพยายามย้อนกลับ เช่น สตริง “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() ฟังก์ชั่นและไม่มีอะไรอื่นหากคุณต้องการเห็นบนหน้าจอ