สวัสดีครับ ไม่ได้เขียน Blog มานาน วันนี้เอาซะหน่อยเป็นเรื่องสั้นๆที่เกี่ยวกับการ Clone object ใน Javascript
ปกติ Object ใน Javascript จะเป็น Referent type หมายความว่า เมื่อเราสร้าง Object ขึ้นมา มันจะสร้าง Reference variable ไว้ใน Stack memory และใช้ Variable ที่เราประกาศ ชี้ไปยัง data ที่อยู่ในหน่วยความจำส่วนของ Heap memory อีกที
เพื่อความเข้าใจมาดูตัวอย่างนี้ครับ
val obj1 = {
counter: 1
}
val obj2 = obj1
obj2.counter++
// Output "Counter in obj1 is: 2"
console.log("Counter in obj1 is: " + obj1.counter)
จากตัวอย่าง จะเห็นว่า obj1 และ Obj2 ชี้ไปยัง Object เดียวกัน ทําให้เมื่อเปลี่ยนแปลงข้อมูลที่อยู่ใน obj2 ส่งผลให้ obj1 เปลี่ยนแปลงตามไปด้วย
ถ้าหากว่าถ้าเราต้องการจะ Clone object ละ จะทําอย่างไร?
ในบทความนี้ผมจะเสนอวิธีการ Clone สองวิธีดังนี้
const deepClone = (obj) => {
return JSON.parse(JSON.stringify(obj));
};
let testObject = {
counter: 1,
};
let newObject = deepClone(testObject);
newObject.counter++;
console.log('testObject data is ' + testObject.counter);
console.log('newObject data is ' + newObject.counter);
ลองรัน Code ได้ที่นี่ es6console.com/jnenhefu/
การทํางานคือจะแปลง Object เป็น Json String ก่อน แล้วก็แปลงกลับ เป็น Object อีกครั้ง
const deepClone = (obj, output = Array.isArray(obj) ? [...obj] : { ...obj }) => {
Object.keys(obj).forEach((key) => {
if (typeof obj[key] === 'object') {
output[key] = Array.isArray(obj[key]) ? [...obj[key]] : { ...obj[key] };
deepCopy(obj[key], output[key]);
}
});
return output;
};
let testObject = {
counter: 1,
};
let newObject = deepClone(testObject);
newObject.counter++;
console.log('testObject data is ' + testObject.counter);
console.log('newObject data is ' + newObject.counter);
ทดลองรันได้ที่นี่ jsfiddle.net/kr81zq67/3/
ทั้งสองแบบสามารถใช้งานได้เหมือนกัน แต่จะมีข้อแตกต่างคือ แบบที่1 จะไม่สามารถใช้กับ Object ที่มีข้อมูลเป็น Fuction ได้ ส่วนแบบที่2 สามารถใช้กับ Object ที่มีข้อมูลทุกประเภท
ใน Raspberry pi จะไม่มี Real Time Clock มาให้ เมื่อเราปิดเครื่อง หรือไม่มีไฟฟ้าจ่ายให้กับ Raspberry pi วันที่และเวลาของเครื่องจะไม่เป็นปัจจุบัน วิธีที่จะทําให้เวลาของเครื่องเป็นวันที่ปัจจุบันมีด้วยกัน 2 วิธี ดังนี้ใช้ NTP server (จะต้องเชื่อมต่อกับเครือขาย internet)ใช้ Real time clock (ไม่ต้องเชื่อมต่อกับเครือขาย internet)ในบทความนี้เราจะอธิบายวิธีใช้ Real time clock เป็นฐานเวลาให้กับ Raspberry pi ก่อนอื่นมารู้จักกันก่อนว่ามันคืออะไร Real time clock เป็น module ฐานเวลา เนื่องจากตัว module ใช้พลังงานจากถ่านกระดุมขนาดเล็กทําให้ตัว module ทํางานอยู่ตลอดเวลาแม้ไม่ได้จ่ายไฟเลี้ยง
วิธีใช้ scp ใน ubuntuถ้าต้องการจะ copy file จาก server A ไปยัง server B สามารถใช้คําสั่ง scp โดยรูปแบบการใช้คือ
rmdir คือคําสั่งที่ใช้ในการลบ Directory โดยรูปแบบการใช้งานคือ