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移动 = diff(旧列表, 新列表, "id")// `moves` 是一系列操作(删除或插入): // 类型 0 是删除,类型 1 是插入 // 移动:[// {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(函数(移动) { 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 里沃拉斯
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。