@connectv/core
Version:
agent-based reactive programming library for typescript/javascript
30 lines • 952 B
JavaScript
export function diff(value, oldKeyMap, keyfunc) {
const additions = [];
const deletions = [];
const moves = [];
const newKeyMap = Object.entries(value).reduce((map, [index, item]) => {
const _key = keyfunc(item);
map[_key] = { index, item };
if (!(_key in oldKeyMap))
additions.push({ index, item });
return map;
}, {});
Object.entries(oldKeyMap).forEach(([_key, entry]) => {
if (!(_key in newKeyMap))
deletions.push(entry);
else {
const _newEntry = newKeyMap[_key];
if (_newEntry.index != entry.index)
moves.push({
oldIndex: entry.index,
newIndex: _newEntry.index,
item: entry.item
});
}
});
return {
changes: { additions, deletions, moves },
newKeyMap,
};
}
//# sourceMappingURL=keyed-array-diff.js.map