JSFiddle - React, Tailwind, and code Playground
by neonDog
JavaScript
const isNumeric = function (n) {
return !isNaN(parseFloat(n)) && isFinite(n);
};
const createPatchPathNotExist = function(obj, path, seperator, patch=[]) {
//path = pathToArray(path, seperator);
const pathCopy = [];
let index = 0;
const length = path.length;
if (length === 0) {
return obj;
}
while (obj != null && index < length) {
obj = obj[path[index++]];
pathCopy.push(path[index]);
}
//Whole path exists
if (index && index === length) return patch;
console.warn('Whole patch does not exist yet');
for (let i=index; i < length; i++) {
const nextPath = path[i + 1];
const isArray = isNumeric(nextPath) || nextPath === '-';
const value = isArray ? [] : {};
patch.push({op:'add', path: pathCopy, value});
}
}
const obj = {
'fuck':{
'rabbit':{}
}
};
console.error(createPatchPathNotExist(obj, ['fuck', 'rabbit', 'sugar', '-']));
console.error(createPatchPathNotExist(obj, ['duck', 'rabbit', '-', 'bitch']));