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);