sampledb
Version:
Sample data in a database style format.
67 lines (47 loc) • 1.55 kB
JavaScript
export default (json, keysToInclude) =>
new manager().reset(
json,
keysToInclude
);
class manager {
constructor() {
this.data = {};
}
async reset (
json,
keysToInclude,
deleteIfKeyNotFound = false
) {
if (json.endsWith('.json')) {
json = await fetch(json);
json = await json.json();
}
if (typeof json === 'string')
json = JSON.parse(json);
// Get the relevant keys from source
if (keysToInclude) {
keysToInclude =
keysToInclude
.split(',')
.map(str => str.trim());
let j = {};
for (let entry of Object.entries(json))
if (keysToInclude.includes(entry[0]))
j[entry[0]] = entry[1];
json = j;
}
// delete irrelevant keys in target
if (deleteIfKeyNotFound) {
let targetKeys = Object.keys(this.data);
let sourceKeys = Object.keys(json);
let keysToDelete = targetKeys
.filter(tk => !sourceKeys.includes(tk));
for (let key of keysToDelete)
delete this.data[key];
}
// reset the target keys with the source keys
for(let entry of Object.entries(json))
this.data[entry[0]] = json[entry[0]];
return this;
}
}