JSFiddle - React, Tailwind, and code Playground

JavaScript

"use strict";

function decomp(object) {
    let result = [];
    for (let key of Object.keys(object).sort()) {
        let val = object[key];
        if (Array.isArray(val)) {
            for (let item of val) {
                result.push(item);
            }
        } else {
            result.push(val);
        }
    }
    return result;
}
function recomp(originalObject, updatedValsArray) {
    let result = {};
    let i = 0;
    for (let key of Object.keys(originalObject).sort()) {
        let originalVal = originalObject[key]
        if (Array.isArray(originalVal)) {
            let arr = [];
            for (let item of originalVal) {
                arr.push(updatedValsArray[i++]);
            }
            result[key] = arr;
        } else {
            result[key] = updatedValsArray[i++];
        }
    }
    return result;
}
function structure(batchedFunc) {
    return obj => recomp(obj, batchedFunc(decomp(obj)));
}

let batchSquare = arr => arr.map(e => e*e);
let inputs = {
  a: 3,
  b: [3, 6, 5],
  c: 22
};

let f = structure(batchSquare);
let out = f(inputs);

console.log(out);