Как оптимизировать запись всех методов класса в простой объект?Javascript

Форум по Javascript
Ответить
Anonymous
 Как оптимизировать запись всех методов класса в простой объект?

Сообщение Anonymous »

В рамках конвейера ETL я конвертирую данные JSON в модель вложенных классов. Модели предоставляют методы, соответствующие свойствам, которые я в конечном итоге хочу преобразовать в JSON и записать в индекс Elasticsearch. Сериализация классов в JSON занимает очень много времени, и мне интересно, существует ли очевидный способ оптимизировать этот процесс.
Это упрощенная схема взаимодействия моделей:
class ParentModel {

children () {
this.rawChildren.map(child => new ChildModel(rawChild))
}

property1(){
// some logic to build out the property
}
property2(){
// some logic to build out the property
}

}

И дочерняя, и родительская модели наследуются от базовой модели с помощью следующего метода преобразования моделей в JSON для отправки в эластичный поиск:
modelToJson () {
// Apply to-json to this object:
const plainObject = baseToJSON(this)
// Recursively apply to-json to any child entity that implements toJson:
Object.entries(plainObject).forEach(([key, value]) => {
// Handle case where ES model method returns a single ES model:
if (value && value.toJson) {
plainObject[key] = value.toJson()
// Handle case where ES model method returns an array of ES models:
} else if (Array.isArray(value) && value.some((v) => v && v.toJson)) {
plainObject[key] = value.map((subModel) => subModel && subModel.toJson())
}
})
return plainObject
}

const baseToJSON = (model) => {
const methods = _publicMethods(model)
const objectToJson = {}
methods.forEach((method) => {
// Initialize the property first so that the resulting object keys are
// created in the same alpha-sorted order they're found, even if some of
// the values are returned async:
objectToJson[method] = null

// Call the model method, awaiting if async:
objectToJson[method] = model[method]()

// If method returns null, don't include property:
if (objectToJson[method] === null) delete objectToJson[method]
})

return objectToJson
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ain-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»