// Begin----------------------------------------------------------------
/* function flattenObject-----------------------------------------------
*
* Flattens complex objects
*
* Original code from Muthu Krishnan
* https://stackoverflow.com/questions/44134212
* with modifications and additions from Stefan Schnell
*/
function flattenObject(obj) {
var flatObj = {};
for (var key in obj) {
if ((typeof obj[key]) === "object" && obj[key] !== null) {
if (obj[key] instanceof Date) {
flatObj[key] = new Date(obj[key]);
} else {
var flatObject = flattenObject(obj[key]);
if (Object.keys(flatObject).length > 0) {
for (var flatKey in flatObject) {
// Hint: Not every character works here
flatObj[key + '$' + flatKey] = flatObject[flatKey];
}
} else {
flatObj[key] = obj[key];
}
}
} else {
flatObj[key] = obj[key];
}
}
return flatObj;
}
// Main-----------------------------------------------------------------
var obj = {
a : 1,
b : {
ba : 2,
},
c : [1, 2, 3],
d : [
{
da : ['da1', 'da2', 'da3'],
},
{
db : ['db1', 'db2', 'db3'],
},
{
dc : [
{
dca : ['dca1', 'dca2', null],
},
],
},
null,
undefined,
NaN,
0,
'',
['a', 'b', ['c', 'd'], ['e', 'f']],
[
{
dda : 1,
},
{
ddb : 1,
},
],
],
e : [true, false],
f : [[1, 2]],
g : function() {
return "Hello World";
},
h : new Date(),
i : [],
j : {},
z : "End"
};
var newObj = flattenObject(obj)
System.log(JSON.stringify(newObj));
// Hint: Undefined, function and symbol values are omitted by stringify.
// Infinity and NaN, as well as the value null, are all considered null.
/* result =>
{
"a":1,
"b$ba":2,
"c$0":1,
"c$1":2,
"c$2":3,
"d$0$da$0":"da1",
"d$0$da$1":"da2",
"d$0$da$2":"da3",
"d$1$db$0":"db1",
"d$1$db$1":"db2",
"d$1$db$2":"db3",
"d$2$dc$0$dca$0":"dca1",
"d$2$dc$0$dca$1":"dca2",
"d$2$dc$0$dca$2":null,
"d$3":null,"d$5":null,
"d$6":0,
"d$7":"",
"d$8$0":"a",
"d$8$1":"b",
"d$8$2$0":"c",
"d$8$2$1":"d",
"d$8$3$0":"e",
"d$8$3$1":"f",
"d$9$0$dda":1,
"d$9$1$ddb":1,
"e$0":true,
"e$1":false,
"f$0$0":1,
"f$0$1":2,
"h":"2023-05-31T15:53:48.684Z",
"i":[],
"j":{},
"z":"End"
}
*/
// End------------------------------------------------------------------