คำตอบของฉันส่วนใหญ่มาจากคำตอบที่ได้รับการจัดอันดับสูงสุดที่นี่และหวังว่าทุกคนจะเข้าใจ (มีคำอธิบายเดียวกันกับ GitHub ของฉันด้วย) นี่คือสาเหตุที่การใช้ความผิดเพี้ยนกับแผนที่ใช้งาน
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
วัตถุประสงค์ของฟังก์ชั่นคือการใช้วัตถุและปรับเปลี่ยนเนื้อหาต้นฉบับของวัตถุโดยใช้วิธีการที่มีให้กับวัตถุทั้งหมด (วัตถุและอาร์เรย์เหมือนกัน) โดยไม่ต้องคืนค่าอาร์เรย์ เกือบทุกอย่างภายใน JS เป็นวัตถุและด้วยเหตุผลนั้นองค์ประกอบต่อไปที่ไปป์ไลน์ของการสืบทอดสามารถใช้เทคนิคที่มีอยู่ให้กับผู้ที่อยู่ในบรรทัด (และสิ่งที่ตรงกันข้ามจะปรากฏ)
เหตุผลที่ใช้งานได้เนื่องจากฟังก์ชั่น. map แสดงอาเรย์ที่ต้องการให้คุณระบุ RETURN ที่ชัดเจนหรือโดยปริยายของอาเรย์แทนการปรับเปลี่ยนออบเจ็กต์ที่มีอยู่ คุณหลอกให้โปรแกรมคิดว่าวัตถุเป็นอาเรย์โดยใช้ Object.keys ซึ่งจะช่วยให้คุณใช้ฟังก์ชั่นแผนที่โดยทำหน้าที่เกี่ยวกับค่าของแต่ละคีย์ที่เกี่ยวข้อง (จริง ๆ แล้วฉันกลับอาร์เรย์โดยไม่ตั้งใจ ตราบใดที่ยังไม่มีการคืนค่าในความรู้สึกปกติจะไม่มีการสร้างอาเรย์ด้วยออบเจ็กต์แบบเดิมเหมือนเดิมและแก้ไขตามที่โปรแกรมไว้
โปรแกรมนี้ใช้วัตถุที่เรียกว่ารูปภาพและนำค่าของคีย์และผนวกแท็ก url สำหรับใช้ภายในฟังก์ชันอื่น ต้นฉบับคือ:
var images = {
snow: 'https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305',
sunny: 'http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-east-
Matanzas-city- Cuba-20170131-1080.jpg',
rain: 'https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg' };
... และแก้ไขแล้วคือ:
var images = {
snow: url('https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305'),
sunny: url('http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-
east-Matanzas-city- Cuba-20170131-1080.jpg'),
rain: url('https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg')
};
โครงสร้างดั้งเดิมของวัตถุนั้นยังคงอยู่เพื่อให้สามารถเข้าถึงคุณสมบัติปกติได้ตราบใดที่ไม่มีการส่งคืน อย่าให้มันคืนอาร์เรย์เหมือนปกติและทุกอย่างจะดี เป้าหมายคือการปรับเปลี่ยนค่าดั้งเดิม (ภาพ [กุญแจ]) ตามความต้องการและไม่ใช่สิ่งอื่นใด เท่าที่ฉันรู้เพื่อป้องกันการส่งออกอาร์เรย์มีได้มีการจัดรูปใหม่ของภาพ [สำคัญ] และไม่มีการร้องขอโดยปริยายหรือชัดเจนที่จะกลับอาร์เรย์ (การกำหนดตัวแปรทำเช่นนี้
แก้ไข:
จะกล่าวถึงวิธีการอื่นของเขาเกี่ยวกับการสร้างวัตถุใหม่เพื่อหลีกเลี่ยงการแก้ไขวัตถุดั้งเดิม (และการมอบหมายใหม่ยังคงมีความจำเป็นเพื่อหลีกเลี่ยงการสร้างอาร์เรย์เป็นผลลัพธ์โดยไม่ได้ตั้งใจ) ฟังก์ชั่นเหล่านี้ใช้ไวยากรณ์ลูกศรและหากคุณต้องการสร้างวัตถุใหม่สำหรับใช้ในอนาคต
const mapper = (obj, mapFn) => Object.keys(obj).reduce((result, key) => {
result[key] = mapFn(obj)[key];
return result;
}, {});
var newImages = mapper(images, (value) => value);
วิธีการทำงานของฟังก์ชั่นเหล่านี้เป็นเช่นนั้น:
mapFn รับฟังก์ชั่นที่จะเพิ่มในภายหลัง (ในกรณีนี้ (ค่า) => ค่า) และเพียงคืนสิ่งที่เก็บไว้ที่นั่นเป็นค่าสำหรับคีย์นั้น (หรือคูณสองถ้าคุณเปลี่ยนค่าส่งคืนเหมือนที่เขาทำ) ใน mapFn ( obj) [สำคัญ]
จากนั้นกำหนดค่าดั้งเดิมใหม่ที่เกี่ยวข้องกับคีย์ในผลลัพธ์ [key] = mapFn (obj) [key]
และส่งคืนการดำเนินการที่ทำกับผลลัพธ์ (ตัวสะสมที่อยู่ในวงเล็บเริ่มต้นในตอนท้ายของฟังก์ชัน. reduce)
ทั้งหมดนี้จะถูกดำเนินการบนวัตถุที่เลือกและยังคงไม่สามารถร้องขอโดยปริยายสำหรับอาร์เรย์ที่ส่งคืนและใช้ได้เฉพาะเมื่อกำหนดค่าใหม่เท่าที่ฉันสามารถบอกได้ สิ่งนี้จำเป็นต้องมียิมนาสติกจิต แต่ลดจำนวนบรรทัดของรหัสที่จำเป็นตามที่เห็นด้านบน ผลลัพธ์จะเหมือนกับที่เห็นด้านล่าง:
{snow: "https://www.trbimg.com/img-5aa059f5/turbine/bs-
md-weather-20180305", sunny: "http://www.cubaweather.org/images/weather-
photos/l…morning-east-Matanzas-city-Cuba-20170131-1080.jpg", rain:
"https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg"}
โปรดจำไว้ว่าสิ่งนี้ใช้ได้กับ NON-NUMBERS คุณสามารถทำซ้ำวัตถุใด ๆ โดยเพียงแค่คืนค่าในฟังก์ชั่น mapFN
Object.keys
ซึ่งไม่มีคำสั่งที่ชัดเจน อาจเป็นปัญหาได้ผมขอแนะนำให้ใช้Object.getOwnPropertyNames
แทน