ฉันฟัง "พอดแคสต์ Syntax FM" ที่ยอดเยี่ยมซึ่งสรุปอาร์เรย์ JavaScript และวิธีการอ็อบเจ็กต์ที่เป็นประโยชน์ วิธีการเหล่านี้ช่วยให้นักพัฒนาเขียนโค้ดที่ชัดเจนและอ่านง่าย วิธีการเหล่านี้จำนวนมากช่วยลดความจำเป็นในการเข้าถึงไลบรารียูทิลิตี้เช่น Lodash
วิธีการทั้งหมดในบทความนี้สามารถเชื่อมโยงกันได้ ซึ่งหมายความว่าสามารถใช้ร่วมกับวิธีการอื่นได้ และยังไม่มีการเปลี่ยนแปลงข้อมูล ซึ่งมีความสำคัญอย่างยิ่งเมื่อทำงานกับ React ด้วยวิธีการอาร์เรย์และอ็อบเจ็กต์เหล่านี้ คุณจะพบว่าคุณไม่จำเป็นต้องเข้าถึงลูป for
หรือ while
อีกต่อไป
.filter()
สร้างอาร์เรย์ใหม่โดยพิจารณาว่ารายการในอาร์เรย์ผ่านเงื่อนไขที่กำหนดหรือไม่
ตัวอย่าง
สร้างอาร์เรย์อายุของนักเรียนที่ตรงกับอายุที่ดื่มสุราตามกฎหมาย
const studentsAge = [17, 16, 18, 19, 21, 17]; const ableToDrink = studentsAge.filter( age => age > 18 );
// ableToDrink will be equal to [19, 21]
.map()
สร้างอาร์เรย์ใหม่โดยจัดการค่าในอาร์เรย์อื่น เหมาะสำหรับการจัดการข้อมูลและมักใช้ใน React เนื่องจากเป็นวิธีการที่ไม่เปลี่ยนรูปแบบ
ตัวอย่าง
สร้างอาร์เรย์ที่เพิ่ม $
ที่จุดเริ่มต้นของตัวเลขแต่ละตัว
const numbers = [2, 3, 4, 5]; const dollars = numbers.map( number => '$' + number);
// dollars will be equal to ['$2', '$3', '$4', '$5']
.reduce()
วิธีที่มักถูกมองข้ามนี้ใช้ตัวสะสมเพื่อลดรายการทั้งหมดในอาร์เรย์ให้เป็นค่าเดียว เหมาะสำหรับการคำนวณผลรวม ค่าที่ส่งคืนสามารถเป็นประเภทใดก็ได้ (เช่น วัตถุ อาร์เรย์ สตริง จำนวนเต็ม)
ตัวอย่าง
เพิ่มจำนวนเต็มในอาร์เรย์
const numbers = [5, 10, 15]; const total = numbers.reduce( (accumulator, currentValue) => accumulator + currentValue);
// total will be equal to 30
มีกรณีการใช้งานที่ยอดเยี่ยมสำหรับ .reduce()
ที่ระบุไว้ในเอกสาร MDN ที่ให้ตัวอย่างเกี่ยวกับวิธีการทำสิ่งต่างๆ เช่น การทำให้อาร์เรย์ของอาร์เรย์เรียบขึ้น การจัดกลุ่มวัตถุตามคุณสมบัติ และการลบรายการที่ซ้ำกันในอาร์เรย์
.forEach()
ใช้ฟังก์ชันกับแต่ละรายการในอาร์เรย์
ตัวอย่าง
บันทึกแต่ละรายการอาร์เรย์ไปยังคอนโซล
const emotions = ['happy', 'sad', 'angry']; emotions.forEach( emotion => console.log(emotion) );
// Will log the following: // 'happy' // 'sad' // 'angry'
.some()
ตรวจสอบว่ารายการใดในอาร์เรย์ผ่านเงื่อนไขหรือไม่ กรณีการใช้งานที่ดีคือการตรวจสอบสิทธิ์ของผู้ใช้ นอกจากนี้ยังสามารถใช้ในทำนองเดียวกันกับ .forEach()
โดยที่คุณจะดำเนินการกับแต่ละรายการอาร์เรย์และแยกออกจากลูปเมื่อส่งกลับค่า truthy
ตัวอย่าง
ตรวจสอบว่ามี 'admin'
อย่างน้อยหนึ่งตัวในอาร์เรย์หรือไม่
const userPrivileges = ['user', 'user', 'user', 'admin']; const containsAdmin = userPrivileges.some( element => element === 'admin');
// containsAdmin will be equal to true
.every()
คล้ายกับ .some()
แต่ตรวจสอบว่ารายการทั้งหมดในอาร์เรย์ผ่านเงื่อนไขหรือไม่
ตัวอย่าง
ตรวจสอบว่าการให้คะแนนทั้งหมดเท่ากับหรือมากกว่า 3 ดาวหรือไม่
const ratings = [3, 5, 4, 3, 5]; const goodOverallRating = ratings.every( rating => rating >= 3 );
// goodOverallRating will be equal to true
.includes()
ตรวจสอบว่าอาร์เรย์มีค่าที่แน่นอนหรือไม่ คล้ายกับ .some()
แต่แทนที่จะค้นหาเงื่อนไขที่จะผ่าน จะดูว่าอาร์เรย์มีค่าเฉพาะหรือไม่
ตัวอย่าง
ตรวจสอบว่าอาร์เรย์มีรายการที่มีสตริง ‘waldo’
หรือไม่
const names = ['sophie', 'george', 'waldo', 'stephen', 'henry']; const includesWaldo = names.includes('waldo');
// includesWaldo will be equal to true
Array.from()
นี่เป็นวิธีคงที่ที่สร้างอาร์เรย์โดยยึดตามอาร์เรย์หรือสตริงอื่น คุณยังสามารถส่งฟังก์ชันโทรกลับ map
เป็นอาร์กิวเมนต์เพื่อจัดรูปแบบข้อมูลในอาร์เรย์ใหม่เพิ่มเติมได้ จริงๆ แล้ว ฉันไม่แน่ใจเหมือนกันว่าทำไมบางคนถึงใช้วิธีนี้กับวิธี .map()
ตัวอย่าง
สร้างอาร์เรย์จากสตริง
const newArray = Array.from('hello');
// newArray will be equal to ['h', 'e', 'l', 'l', 'o']
สร้างอาร์เรย์ที่มีค่าสองเท่าสำหรับแต่ละรายการในอาร์เรย์อื่น
const doubledValues = Array.from([2, 4, 6], number => number * 2);
// doubleValues will be equal to [4, 8, 12]
Object.values()
ส่งกลับอาร์เรย์ของค่าของวัตถุ
ตัวอย่าง
const icecreamColors = { chocolate: 'brown', vanilla: 'white', strawberry: 'red', } const colors = Object.values(icecreamColors);
// colors will be equal to ["brown", "white", "red"]
Object.keys()
ส่งกลับอาร์เรย์ของคีย์ของวัตถุ
ตัวอย่าง
const icecreamColors = { chocolate: 'brown', vanilla: 'white', strawberry: 'red', } const types = Object.keys(icecreamColors);
// types will be equal to ["chocolate", "vanilla", "strawberry"]
Object.entries()
สร้างอาร์เรย์ซึ่งประกอบด้วยอาร์เรย์ของคู่คีย์/ค่าของออบเจ็กต์
ตัวอย่าง
const weather = { rain: 0, temperature: 24, humidity: 33, } const entries = Object.entries(weather);
// entries will be equal to // [['rain', 0], ['temperature', 24], ['humidity', 33]]
การแพร่กระจายอาร์เรย์
การแพร่กระจายอาร์เรย์โดยใช้ตัวดำเนินการการแพร่กระจาย (…
) ช่วยให้คุณสามารถขยายองค์ประกอบในอาร์เรย์ได้ มีประโยชน์เมื่อเชื่อมอาร์เรย์จำนวนมากเข้าด้วยกัน นอกจากนี้ยังเป็นวิธีที่ดีในการหลีกเลี่ยงการใช้เมธอด splice()
เมื่อต้องการลบองค์ประกอบบางอย่างออกจากอาร์เรย์ เนื่องจากสามารถใช้ร่วมกับเมธอด slice()
เพื่อป้องกันการกลายพันธุ์โดยตรงของอาร์เรย์
ตัวอย่าง
รวมสองอาร์เรย์เข้าด้วยกัน
const spreadableOne = [1, 2, 3, 4]; const spreadableTwo = [5, 6, 7, 8]; const combined = [...spreadableOne, ...spreadableTwo];
// combined will be equal to [1, 2, 3, 4, 5, 6, 7, 8]
ลบองค์ประกอบอาร์เรย์โดยไม่ต้องเปลี่ยนอาร์เรย์เดิม
const animals = ['squirrel', 'bear', 'deer', 'salmon', 'rat']; const mammals = [...animals.slice(0,3), ...animals.slice(4)];
// mammals will be equal to ['squirrel', 'bear', 'deer', 'rat']
การแพร่กระจายของวัตถุ
การแพร่กระจายอ็อบเจ็กต์ทำให้สามารถเพิ่มคุณสมบัติและค่าใหม่ให้กับอ็อบเจ็กต์โดยไม่มีการเปลี่ยนแปลง (เช่น มีการสร้างอ็อบเจ็กต์ใหม่) และยังสามารถใช้เพื่อรวมอ็อบเจ็กต์หลายรายการเข้าด้วยกันได้ ควรสังเกตว่าการกระจายวัตถุไม่ได้ทำการคัดลอกแบบซ้อน
ตัวอย่าง
เพิ่มคุณสมบัติและค่าของวัตถุใหม่โดยไม่ต้องเปลี่ยนวัตถุต้นฉบับ
const spreadableObject = { name: 'Robert', phone: 'iPhone' }; const newObject = { ...spreadableObject, carModel: 'Volkswagen' }
// newObject will be equal to // { carModel: 'Volkswagen', name: 'Robert', phone: 'iPhone' }
ฟังก์ชั่นที่เหลือ
ฟังก์ชันสามารถใช้ไวยากรณ์พารามิเตอร์ส่วนที่เหลือเพื่อยอมรับอาร์กิวเมนต์จำนวนเท่าใดก็ได้เป็นอาร์เรย์
ตัวอย่าง
แสดงอาร์เรย์ของอาร์กิวเมนต์ที่ส่งผ่าน
function displayArgumentsArray(...theArguments) { console.log(theArguments); } displayArgumentsArray('hi', 'there', 'bud');
// Will print ['hi', 'there', 'bud']
Object.freeze()
ป้องกันไม่ให้คุณแก้ไขคุณสมบัติของวัตถุที่มีอยู่หรือเพิ่มคุณสมบัติและค่าใหม่ให้กับวัตถุ บ่อยครั้งที่ผู้คนคิดว่า const
ทำ แต่ const
ช่วยให้คุณสามารถแก้ไขวัตถุได้
ตัวอย่าง
ตรึงวัตถุเพื่อป้องกันไม่ให้คุณสมบัติ name
มีการเปลี่ยนแปลง
const frozenObject = { name: 'Robert' } Object.freeze(frozenObject); frozenObject.name = 'Henry';
// frozenObject will be equal to { name: 'Robert' }
Object.seal()
หยุดคุณสมบัติใหม่ใดๆ จากการเพิ่มลงในออบเจ็กต์ แต่ยังคงอนุญาตให้มีการเปลี่ยนแปลงคุณสมบัติที่มีอยู่ได้
ตัวอย่าง
ปิดผนึกวัตถุเพื่อป้องกันไม่ให้มีการเพิ่มคุณสมบัติ wearsWatch
const sealedObject = { name: 'Robert' } Object.seal(sealedObject); sealedObject.name = 'Bob'; sealedObject.wearsWatch = true;
// sealedObject will be equal to { name: 'Bob' }
Object.assign()
อนุญาตให้รวมวัตถุเข้าด้วยกัน วิธีนี้ไม่จำเป็นจริงๆ เนื่องจากคุณสามารถใช้ไวยากรณ์การกระจายวัตถุแทนได้ เช่นเดียวกับตัวดำเนินการกระจายอ็อบเจ็กต์ Object.assign()
ไม่ได้ทำการโคลนแบบลึก Lodash เป็นเพื่อนที่ดีที่สุดของคุณเมื่อพูดถึงวัตถุโคลนนิ่งระดับลึก
ตัวอย่าง
รวมสองวัตถุเป็นหนึ่งเดียว
const firstObject = {
firstName: 'Robert'
}
const secondObject = {
lastName: 'Cooper'
}
const combinedObject = Object.assign(firstObject, secondObject);
// combinedObject will be equal to { firstName: 'Robert', lastName: 'Cooper' }
หากคุณพบว่าบทความนี้น่าสนใจและการพัฒนาส่วนหน้าสนใจ ลองติดตามฉันที่ Twitter, Github หรือ LinkedIn .
✉️ สมัครสมาชิกCodeBurst'sสัปดาห์ละครั้ง Email Blast,🐦 ติดตามCodeBurstบน Twitter ดู🗺️ แผนงานนักพัฒนาเว็บปี 2018 และ🕸️ เรียนรู้การพัฒนาเว็บแบบ Full Stack .