मैं किसी ऑब्जेक्ट में एक मूल्य को गहराई से असाइन करने का प्रयास कर रहा हूं। उदाहरण के लिए:गहराई से जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक
const errors = {}
if(errorOnSpecificField) {
// TypeError: Cannot read property 'subSubCategory' of undefined(…)
errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
अभी, lodash बिना, मैं कर सकते हैं: एक तिहाई का उपयोग कर से बचने के लिए
const errors = {}
if(errorOnSpecificField) {
_.set(errors, 'subCategory.subSubCategory.fieldWithError', 'Error Message');
}
मैं कोशिश कर रहा हूँ:
const errors = {}
if(errorOnSpecificField) {
errors.subCategory = errors.SubCategory || {}
errors.subCategory.subSubCategory = errors.SubCategory.subSubCategory || {}
errors.subCategory.subSubCategory.fieldWithError = 'Error Message'
}
lodash साथ
, मैं यह कर सकता पार्टी लाइब्रेरी क्या एक और अधिक सुरुचिपूर्ण समाधान है, विशेष रूप से अब es2015 ऑब्जेक्ट विनाशकारी है। व्यस्त ऑपरेशन आसान है:
let {subCategory : {subSubCategory: {fieldWithError}}} = errors
गहरी ऑब्जेक्ट असाइनमेंट का एक सुरुचिपूर्ण समाधान क्या है? धन्यवाद!
(((errors||{}).subCategory||{}).subSubCategory||{}).fieldWithError = 'Error Message'
कि हालांकिerrors.subCategory.subSubCategory
नहीं बना करता है तो यह पहले से ही मौजूद नहीं है,:
Object.assign()? - यह सभी गुणों को ओवरराइड करता है हालांकि –
जैसा कि आप उल्लेख करते हैं, क्योंकि यह पहले से सेट की गई अन्य संपत्तियों को ओवरराइड करता है, यह मेरे मामले – aherriot
के लिए काम नहीं करेगा, फिर आप कई 'विस्तार' कार्यान्वयन –