Diferenciar dos listas en el tiempo O(n). I El algoritmo que encuentra la cantidad mínima de movimientos es la distancia de Levenshtein, que es O (n*m). Este algoritmo no es el mejor, pero es suficiente para la manipulación de la lista DOM frontal.
Este proyecto está influenciado principalmente por el algoritmo 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 nuevaLista = [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]var movimientos = diff(listavieja, lista nueva, "id")// `moves` es una secuencia de acciones (eliminar o insertar): // el tipo 0 es eliminar, el tipo 1 es insertar// mueve: [// {index: 3, type: 0},// {índice: 0, tipo: 1, elemento: {id: "c"}}, // {índice: 3, tipo: 0}, // {índice: 4, tipo: 1, elemento: {id: "f "}}// ]moves.moves.forEach(función(movimiento) { if (move.type === 0) {oldList.splice(move.index, 1) // el tipo 0 se está eliminando } else {oldList.splice(move.index, 0, move.item) // el tipo 1 se está insertando }})// ahora `oldList` es igual a `newList`// [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]console.log(listaantigua)
La licencia MIT (MIT)
Copyright (c) 2015 Lívoras
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.