Я кодирую приложение, где одна и та же структура данных сохраняется много раз. Укороченный пример:Преобразовать объект базы данных на считываемые ключи
user-xyz: {
displayName: 'Bla',
email: '[email protected]',
preferences: {
education: 'high'
}
}
Чтобы сохранить пропускную способность и хранение базы данных, я хотел «Минимизировать» мои ключи базы данных для:
user-xzy: {
dN: 'Bla',
e: '[email protected]'
p: {
e: 'high'
}
}
Теперь у меня есть проблема, что объекты поступают из базы данных в минимизирован и мне нужно переназначить правильные «полные» ключи, поэтому я могу нормально работать с объектом в своем приложении. Я не хочу работать с мини-версией, потому что для новых кодеров было бы намного сложнее.
Что такое хороший способ «перевести» объект, когда у меня есть два e (для пример) в качестве мини-ключа? Мне нужно каким-то образом включить структуру объекта в мою логику, чтобы выбрать соответствующий полный ключ.
EDIT: Ответ Redu решил эту проблему. Теперь я понял, что у меня иногда были объекты с меньшим количеством ключей, потому что база данных не сохранила бы значения «null». Ответ Redu больше не будет работать, потому что он использует индекс. Тем не менее, я был в состоянии изменить свое решение, так что все еще работает, когда ключи отсутствуют:
// mapping object
var userXYZ = {
displayName: 'dN',
email: 'e',
preferences: 'p',
p: {
education: 'e'
}
};
var userXYZMin = {
dN: 'myName',
// e: '[email protected]', -> missing key
p: {
e: 'elementary'
}
};
var restoreKeys = function (original, minified) {
return Object.keys(original)
.reduce(function (o, k) {
if (typeof original[k] !== "object")
o[k] = (typeof minified[original[k]] !== "object"
? minified[original[k]] || ""
: restoreKeys(original[original[k]], minified[original[k]]) || {});
return o;
}, {});
};
Это просто для будущих поисковых запросов :)
Это выглядит хорошо, но это возможно в EC5, а? (в синтаксисе функции) –
@Yorick Tran Конечно ... второй фрагмент должен быть совместим с ES5. – Redu
В частности, я не понимаю '(o [k] = minified [oksm [i]], o)' part, is ", o" переводится на "|| o"? –