У меня было похожее требование, я хочу использовать карту объектов, чтобы в моем коде не было волшебных строк.Например, я хочу иметь карту сообщений вроде:
var message = {
configuration:
{
pdms:
{
type: {
getTypes: {},
getDatabases: {}
}
}
}
};
Теперь вместо использования строки вроде:
"message.configuration.pdms.type.getTypes"
Я хочу использовать:
message.configuration.pdms.type.getTypes
И преобразовать это в строку.Для этого я использую следующую служебную функцию.Обратите внимание, что требуется подчеркивание lib.
var objectToString = (orig, string, obj) => {
var parse = (orig, string, obj) => {
return _.map(_.keys(orig), (key) => {
if (_.isEmpty(orig[key])) {
return orig[key] === obj ? string + '.' + key : '';
} else {
return objectToString(orig[key], string + '.' + key, obj);
}
});
};
return _.chain(parse(orig, string, obj))
.flatten()
.find ((n) => {return n.length > 0;})
.value();
};
Чтобы сделать его более удобным, я частично применяю эту функцию с исходным объектом для преобразования в строки и корневое пространство имен.
var messageToString = _.partial(objectToString, message, 'message');
messageToString(message.configuration.pdms.type.getTypes);
// returns: 'message.configuration.pdms.type.getTypes'