Цель: я пытаюсь уменьшить сложность преобразования моего объекта.Мне сказали использовать функции более высокого порядка, чтобы уменьшить сложность.Я в основном смотрю на блок кода для упрощения, но любые другие указатели или помощь будут приветствоваться.
Проблема: я не вижу четкого способа упростить это даже с функциями более высокого порядка.
Примечание: я не гарантирую наличие всех полей, поэтому мне нужно защититься от ключа неопределенного.Вот почему я делаю (model) => model.key только для чтения свойства, если я проверяю, есть ли ключ.
model:
{
"origName1": "val1",
"origName2": "val2",
"origName3": "val3",<-- this key value is not always present
"origName4": "val4"
}
мой объект преобразования:
let transFormObj = {};
transFormObj.origName1= {'newKey': 'newName1', 'value': (model) => model.origName1};
transFormObj.origName2= {'newKey': 'newName2', 'value': (model) => model.origName2};
transFormObj.origName3= {'newKey': 'newName3', 'value': (model) => model.origName3};
transFormObj.origName4= {'newKey': {parentKey: 'newObj', childKey: 'newName4'}, 'value': (model) => model.origName4};
Блок for, на котором я фокусируюсь:
let returnObj = {}
for(let key in model) {
if(key in transFormObj) {
// is nested object?
if(typeof(transFormObj[key].newKey) === 'object') {
// if parent key doesn't exist create else keep it the same
returnObj[transFormObj[key].newKey.parentKey] = returnObj[transFormObj[key].newKey.parentKey] || {};
returnObj[transFormObj[key].newKey.parentKey][transFormObj[key].newKey.childKey] = transFormObj[key].value(model);
} else {
returnObj[transFormObj[key].newKey] = transFormObj[key].value(model);}
}
}
ожидаемый объект вывода:
{
"newName1": "val1",
"newName2": "val2",
"newName3": "val3",
"newObj": {"newName4" :"val4"}
}