can-diff/list/list
Return a difference of two lists.
diffList( oldList, newList, [identity] )
Compares two lists and produces a sequence of patches that can be applied to make oldList
take
the shape of newList
.
var diffList = require("can-diff/list/list");
console.log(diff([1], [1, 2])); // -> [{type: "splice", index: 1, deleteCount: 0, insert: [2]}]
console.log(diff([1, 2], [1])); // -> [{type: "splice", index: 1, deleteCount: 1, insert: []}]
// with an optional identity function:
diffList(
[{id:1},{id:2}],
[{id:1},{id:3}],
(a,b) => a.id === b.id
); // -> [{type: "splice", index: 1, deleteCount: 1, insert: [{id:3}]}]
The patch algorithm is linear with respect to the length of the lists and therefore does not produce a perfect edit distance (which would be at least quadratic).
It is designed to work with most common list change scenarios, when items are inserted or removed to a list (as opposed to moved with in the last).
For example, it is able to produce the following patches:
diffList(
["a","b","c","d"],
["a","b","X","Y","c","d"]
); // -> [{type: "splice", index: 2, deleteCount: 0, insert: ["X","Y"]}]
Parameters
- oldList
{ArrayLike}
:The source array or list to diff from.
- newList
{ArrayLike}
:The array or list to diff to.
- schemaOrIdentity
{function|getSchema(valueOrType)}
:An optional identity function or a schema with an identity property for comparing elements. If a
schemaOrIdentity
is not provided, the schema of theoldList
will be used. If a schema can not be found, items a default identity function will be created that checks if the two values are strictly equal===
.
Returns
{Array}
:
An array of Patch objects representing the differences
Returns the difference between two ArrayLike objects (that have nonnegative
integer keys and the length
property) as an array of patch objects.
A patch object returned by this function has the following properties:
- type: the type of patch (
"splice"
). - index: the index of newList where the patch begins
- deleteCount: the number of items deleted from that index in newList
- insert: an Array of items newly inserted at that index in newList
Patches should be applied in the order they are returned.