Это зависит: всегда ли это будет объект, подобный
var objToFlatten = {
"a": "b",
"c": "d",
"featuremap": {
"e": "f",
"g": "h"
}
}
Или это может быть несколько вложенных, с несколькими объектами, чтобы сгладить? Например:
var objToFlatten = {
"a": "b",
"c": "d",
"featuremap": {
"e": "f",
"g": "h"
},
"someothermap": {
"e": "f",
"g": "h",
"nestedmap": {
"i": "j"
}
}
}
Первый - простой, но хакерский.
function copyFromObject(other) {
for (var propertyName in other) {
if (propertyName == 'featureMap') continue;
if (other.hasOwnProperty(propertyName)) {
this[propertyName] = other[propertyName];
}
}
return this;
}
var flattened = copyFromObject.call({}, objToFlatten);
Последний будет чище и потребует рекурсивного решения. Также вам нужно выяснить, что вы хотите делать с такими вещами, как дублированные записи. Что если у вас есть два свойства в двух вложенных объектах с одинаковыми именами?