深度分配JavaScript对象文字

ahe*_*iot 8 javascript ecmascript-6

我试图在一个对象中深入分配一个值.例如:

const errors = {}
if(errorOnSpecificField) {
  // TypeError: Cannot read property 'subSubCategory' of undefined(…)
  errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Run Code Online (Sandbox Code Playgroud)

现在,没有lodash,我可以这样做:

const errors = {}
if(errorOnSpecificField) {
    errors.subCategory = errors.SubCategory || {}
    errors.subCategory.subSubCategory = errors.SubCategory.subSubCategory || {}
    errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
Run Code Online (Sandbox Code Playgroud)

有了lodash,我可以这样做:

const errors = {}
if(errorOnSpecificField) {
    _.set(errors, 'subCategory.subSubCategory.fieldWithError', 'Error Message');
}
Run Code Online (Sandbox Code Playgroud)

我试图避免使用第三方库.是否有更优雅的解决方案,特别是现在es2015有对象解构.逆操作很简单:

  let {subCategory : {subSubCategory: {fieldWithError}}} = errors
Run Code Online (Sandbox Code Playgroud)

什么是深层对象分配的优雅解决方案?谢谢!

Bo *_*son 0

这是一种安全地分配给深层对象的相当可读的方法:

(((errors||{}).subCategory||{}).subSubCategory||{}).fieldWithError = 'Error Message'
Run Code Online (Sandbox Code Playgroud)

但是,如果它尚不存在,则不会创建。 errors.subCategory.subSubCategory

  • 这实际上不适用于分配。对于访问,是的,但不能用于创建属性。 (2认同)