list diff
1.0.0
時間 O(n) で 2 つのリストを比較します。 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 は挿入です// 移動: [// {index: 3, type: 0},// {インデックス: 0, タイプ: 1, アイテム: {id: "c"}}, // {インデックス: 3, タイプ: 0}, // {インデックス: 4, タイプ: 1, アイテム: {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 ライセンス (MIT)
著作権 (c) 2015 リボラス
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそれを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。