Skip to content

Instantly share code, notes, and snippets.

@anchnk
Last active February 25, 2019 16:18
Show Gist options
  • Save anchnk/7c390c7e6eeb8d72f0bf0d4c135991f2 to your computer and use it in GitHub Desktop.
Save anchnk/7c390c7e6eeb8d72f0bf0d4c135991f2 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
'use strict';
const f = new Map();
f.set('availpro:1', {id: 1, provider: 'availpro', name: 'Hotel du sentier', rating: 3}); // delete
f.set('synxis:2', {id: 2, provider: 'synxis', name: 'Hotel Opera', rating: 0}); // update
f.set('fastbooking:3', {id: 3, provider: 'fastbooking', name: 'Hotel Garnier', rating: 5}); // skip
const s = new Map();
s.set('synxis:2', {id: 2, provider: 'synxis', name: 'Hotel Opera', rating: 4}); // update
s.set('fastbooking:3', {id: 3, provider: 'fastbooking', name: 'Hotel Garnier', rating: 5}); // skip
s.set('synxis:3', {id: 3, provider: 'synxis', name: 'Hotel Garnier', rating: 5}); // add
s.set('availpro:4', {id: 4, provider: 'availpro', name: 'Hotel Eiffel', rating: 5}); // add
function intersection(f, s) {
return new Map([...f].filter(([id, data]) => {
return s.has(id);
}));
}
function difference(f, s, opts) {
let master = s;
let slave = f;
if (opts.isFetchedMaster) {
master = f;
slave = s;
}
return new Map([...master].filter(([id, data]) => {
return !slave.has(id);
}));
}
function toDelete(f, s) {
return difference(f, s, { isFetchedMaster: true });
}
function toAdd(f, s) {
return difference(f, s, { isFetchedMaster: false });
}
function toUpdate(f, s) {
return intersection(f, s);
}
console.log(toDelete(f, s));
console.log(toAdd(f, s));
console.log(toUpdate(f, s));
{"name": "unsorted-merge", "version": "0.0.0", "bin": "./index.js"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment