ความลึกทั่วไประหว่างวัตถุสองชนิด
ฉันมีสองวัตถุ: และoldObjnewObj ข้อมูลที่oldObjใช้ในการเติมแบบฟอร์มและnewObjเป็นผลมาจากการที่ผู้ใช้เปลี่ยนข้อมูลในแบบฟอร์มนี้และส่งมัน วัตถุทั้งสองอยู่ลึกเช่น พวกเขามีคุณสมบัติที่เป็นวัตถุหรืออาร์เรย์ของวัตถุ ฯลฯ - พวกเขาสามารถอยู่ในระดับ n ลึกดังนั้นอัลกอริทึม diff จะต้องเรียกซ้ำ ตอนนี้ฉันต้องไม่เพียงแค่คิดออกว่ามีการเปลี่ยนแปลงอะไร (เช่นในเพิ่ม / ปรับปรุง / ลบ) จากoldObjถึงnewObjแต่ยังวิธีที่ดีที่สุดแทน จนถึงตอนนี้ความคิดของฉันคือการสร้างgenericDeepDiffBetweenObjectsวิธีการที่จะคืนค่าวัตถุในแบบฟอร์ม{add:{...},upd:{...},del:{...}}แต่ฉันก็คิดว่า: คนอื่นต้องมีสิ่งนี้มาก่อน ดังนั้น ... ไม่มีใครรู้ของห้องสมุดหรือชิ้นส่วนของรหัสที่จะทำเช่นนี้และอาจมีวิธีที่ดีกว่าในการเป็นตัวแทนของความแตกต่าง ปรับปรุง: ฉันคิดว่าวิธีที่ดีกว่าในการแสดงข้อมูลที่อัปเดตโดยใช้โครงสร้างวัตถุเดียวกับnewObjแต่เปลี่ยนค่าคุณสมบัติทั้งหมดเป็นวัตถุในแบบฟอร์ม: {type: '<update|create|delete>', data: <propertyValue>} ดังนั้นถ้าnewObj.prop1 = 'new value'และoldObj.prop1 = 'old value'มันจะตั้งreturnObj.prop1 = {type: 'update', data: 'new value'} อัปเดต 2: มันมีขนดกอย่างแท้จริงเมื่อเราไปถึงคุณสมบัติที่เป็นอาร์เรย์เนื่องจากอาร์เรย์[1,2,3]ควรถูกนับเท่ากับ[2,3,1]ซึ่งง่ายพอสำหรับอาร์เรย์ของชนิดที่มีค่าตามตัวอักษรเช่นสตริง int & bool แต่ยากที่จะจัดการเมื่อมันมาถึง …