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 = []) { //Note: it does not create the very last path part
  //path = pathToArray(path, seperator);
  const pathCopy = [];

  let index = 0;
  const length = path.length;

  if (length === 0) {
    return [];
  }
	
  while (index < length) {
  	
    const currentPath = path[index++];
    pathCopy.push(currentPath);
    
    if (obj != null) {
    	
    	obj = obj[currentPath];
      
    } else {
    	
      const value = isNumeric(currentPath) || currentPath === '-' ? [] : {};
    	patch.push({
        op: 'add',
        path: pathCopy.slice(0,-1),
        value
      });
      
    }
    
  }
  
  return patch;

}


const obj = {
  'fuck': {
    'rabbit': {}
  }
};


//console.error(createPatchPathNotExist(obj, ['fuck', 'rabbit', 'sugar', '-']));
//document.body.innerHTML = JSON.stringify(createPatchPathNotExist(obj, ['fuck', 'rabbit', 'sugar', '-']));
document.body.innerHTML = JSON.stringify(createPatchPathNotExist(obj, ['children','1','children','1','children','2','children']));