simple-array-diff
Version:
Find elements added and removed explicitly between two arrays or elements or objects.
39 lines (35 loc) • 1.32 kB
JavaScript
/**
* Find Delta between two arrays.
*
* Supports array of elements and array of objects
* */
function findDeltaWithinTwoArraysOfObjects(listOriginal, listNew, uniqueProp) {
var delta = {
added: [],
removed: [],
common: []
};
var _deltaMap = {};
var _objHolder = {};
listOriginal.forEach(function (item) {
_objHolder[uniqueProp && item[uniqueProp] || item] = item;
_deltaMap[uniqueProp && item[uniqueProp] || item] = 'remove';
});
listNew.forEach(function (item) {
_objHolder[uniqueProp && item[uniqueProp] || item] = item;
var d = _deltaMap[uniqueProp && item[uniqueProp] || item];
if (Boolean(d) && d == 'remove') {
_deltaMap[uniqueProp && item[uniqueProp] || item] = 'noChange';
} else {
_deltaMap[uniqueProp && item[uniqueProp] || item] = 'added';
}
});
Object.keys(_deltaMap).forEach(function (id) {
if (_deltaMap[id] == 'remove') delta.removed.push(_objHolder[id]);
else if (_deltaMap[id] == 'added') delta.added.push(_objHolder[id]);
else if (_deltaMap[id] == 'noChange') delta.common.push(_objHolder[id]);
});
return delta;
}
//Lets export the method as module require
exports = module.exports = findDeltaWithinTwoArraysOfObjects;