แตกต่างสองรายการในเวลา O(n) I อัลกอริธึมการค้นหาจำนวนการเคลื่อนไหวขั้นต่ำคือระยะทางเลเวนชไทน์ ซึ่งก็คือ O(n*m) อัลกอริทึมนี้ไม่ใช่วิธีที่ดีที่สุด แต่เพียงพอสำหรับการจัดการรายการ DOM ส่วนหน้า
โปรเจ็กต์นี้ส่วนใหญ่ได้รับอิทธิพลจากอัลกอริธึม virtual-dom
$ npm install list-diff2 --save
var diff = need("list-diff2")var oldList = [{id: "a"}, {id: "b"}, {id: "c"}, {id: "d"}, {id: "e"}]var newList = [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]var ย้าย = diff (oldList, newList, "id")// `moves` คือลำดับของการกระทำ (ลบหรือแทรก): // ประเภท 0 กำลังลบ, ประเภท 1 กำลังแทรก// การเคลื่อนไหว: [// {index: 3, ประเภท: 0},// {index: 0, ประเภท: 1, รายการ: {id: "c"}}, // {index: 3, ประเภท: 0}, // {index: 4, ประเภท: 1, รายการ: {id: "f"}}// ]moves.moves.forEach(ฟังก์ชั่น(ย้าย) { if (move.type === 0) {oldList.splice(move.index, 1) // type 0 กำลังลบออก } else {oldList.splice(move.index, 0, move.item) // กำลังแทรกประเภท 1 }})// ตอนนี้ `oldList` เท่ากับ `newList`// [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]console.log(oldList)
ใบอนุญาต MIT (MIT)
ลิขสิทธิ์ (c) 2015 Livoras
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.