list diff
1.0.0
시간 O(n)에서 두 목록을 비교합니다. I 최소 이동량을 찾는 알고리즘은 O(n*m)인 Levenshtein 거리입니다. 이 알고리즘은 최고는 아니지만 프런트 엔드 DOM 목록 조작에는 충분합니다.
이 프로젝트는 대부분 virtual-dom 알고리즘의 영향을 받습니다.
$ npm install list-diff2 --save
var diff = require("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, type: 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) // 유형 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 리보라스
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.