list diff
1.0.0
比較兩個列表的時間複雜度為 O(n)。 I 尋找最小移動量的演算法是編輯距離,即 O(n*m)。該演算法不是最好的,但足以用於前端 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 move = diff(oldList, newList, "id")// `moves` 是一系列操作(刪除或插入): // 類型0 是刪除,類型1 是插入// Moves: [// {index: 3 , type: 0},// {index: 0, type: 1, item: {id: "c"}}, // {index: 3, type: 0}, // {index: 4, type: 1 , item: {id: "f"}}// ]moves.moves.forEach(function(move) { 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)
版權所有 (c) 2015 里沃拉斯
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.