Diferença entre duas listas no tempo O(n). I O algoritmo que encontra a quantidade mínima de movimentos é a distância de Levenshtein, que é O (n * m). Este algoritmo não é o melhor, mas é suficiente para manipulação de listas DOM front-end.
Este projeto é influenciado principalmente pelo 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 novaLista = [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]var movimentos = diff(Listavelha,Listanova, "id")// `moves` é uma sequência de ações (remover ou inserir): // tipo 0 está removendo, tipo 1 está inserindo// move: [// {index: 3, type: 0},// {índice: 0, tipo: 1, item: {id: "c"}}, // {índice: 3, tipo: 0}, // {índice: 4, tipo: 1, item: {id: "f "}}// ]moves.moves.forEach(function(move) { if (move.type === 0) {oldList.splice(move.index, 1) // o tipo 0 está removendo } else {oldList.splice(move.index, 0, move.item) // o tipo 1 está inserindo }})// agora `oldList` é igual a `newList`// [{id: "c"}, {id: "a"}, {id: "b"}, {id: "e"}, {id: "f"}]console.log(oldList)
A Licença MIT (MIT)
Copyright (c) 2015 Lívoras
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.