42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import globals from '../globals';
|
|
|
|
export default function flatten (data, keepArray = false) { // flatten object: {a: {b: true}} -> {a.b: true}
|
|
const result = {};
|
|
function recurse (cur, prop) {
|
|
if (Object(cur) !== cur || Object.keys(cur).length === 0) {
|
|
result[prop] = cur;
|
|
}
|
|
else if (prop === `${globals.spectrum.spectrum}.${globals.spectrum.dpt}`) {
|
|
result[prop + '.labels'] = cur.map(e => parseFloat(e[0]));
|
|
result[prop + '.values'] = cur.map(e => parseFloat(e[1]));
|
|
}
|
|
else if (Array.isArray(cur)) {
|
|
if (keepArray) {
|
|
result[prop] = cur;
|
|
}
|
|
else { // array to string
|
|
if (cur.length && (Object(cur[0]) !== cur || Object.keys(cur[0]).length === 0)) { // array of non-objects
|
|
result[prop] = '[' + cur.join(', ') + ']';
|
|
}
|
|
else {
|
|
let l = 0;
|
|
for(let i = 0, l = cur.length; i < l; i++)
|
|
recurse(cur[i], prop + "[" + i + "]");
|
|
if (l == 0)
|
|
result[prop] = [];
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
let isEmpty = true;
|
|
for (let p in cur) {
|
|
isEmpty = false;
|
|
recurse(cur[p], prop ? prop+"."+p : p);
|
|
}
|
|
if (isEmpty && prop)
|
|
result[prop] = {};
|
|
}
|
|
}
|
|
recurse(data, '');
|
|
return result;
|
|
} |