Mesclar / nivelar objetos recursivos em Javascript simples e antigo

Na verdade, é muito fácil de fazer.

Dê a essa função uma matriz de objetos e ela os mesclará em um.

var merge = function(objects) {
var out = {};

for (var i = 0; i < objects.length; i++) {
for (var p in objects[i]) {
out[p] = objects[i][p];
}
}

return out;
}

Dê a esta função um objeto aninhado e isso a tornará de nível único

var flatten = function(obj, name, stem) {
var out = {};
var newStem = (typeof stem !== 'undefined' && stem !== '') ? stem + '_' + name : name;

if (typeof obj !== 'object') {
out[newStem] = obj;
return out;
}

for (var p in obj) {
var prop = flatten(obj[p], p, newStem);
out = merge([out, prop]);
}

return out;
};

Para usar, basta:

var myObject = {
name
: 'fiiv',
birthYear
: 1986,
favoriteColors
: [ 'red', 'orange' ],
isWearing
: {
shirt
: {
color
: 'white'
},
shorts
: {
color
: 'blue'
}
}
};

console
.log(flatten(myObject));

E isso produz:

{
name
: 'fiiv',
birthYear
: 1986,
favoriteColors_0
: 'red',
favoriteColors_1
: 'orange',
isWearing_shirt_color
: 'white',
isWearing_shorts_color
: 'blue'
}