Próbuję głęboko przypisać wartość w obiekcie. Na przykład:Głębokie przypisanie literału obiektu JavaScript
const errors = {}
if(errorOnSpecificField) {
// TypeError: Cannot read property 'subSubCategory' of undefined(…)
errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Teraz bez lodash mogę zrobić:
const errors = {}
if(errorOnSpecificField) {
errors.subCategory = errors.SubCategory || {}
errors.subCategory.subSubCategory = errors.SubCategory.subSubCategory || {}
errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Z lodash, mogę to zrobić:
const errors = {}
if(errorOnSpecificField) {
_.set(errors, 'subCategory.subSubCategory.fieldWithError', 'Error Message');
}
staram się unikać trzeci biblioteka imprezowa. Czy istnieje bardziej eleganckie rozwiązanie, zwłaszcza teraz, gdy es2015 ma destrukturyzację obiektu. Operacja odwrotna jest łatwa:
let {subCategory : {subSubCategory: {fieldWithError}}} = errors
Co to jest eleganckie rozwiązanie do wykonywania głębokich obiektów? Dzięki!
Object.assign()? - nadpisuje wszystkie właściwości przez: –
Jak wspomniałeś, ponieważ przesłania inne ustawione już właściwości, to nie zadziała dla mojego przypadku: – aherriot
możesz wtedy szukać niektórych z wielu implementacji 'extend'ów –