2015-06-22 19 views
5

के कुछ गुण शामिल हैं, उदाहरण के लिए यह सबसे अच्छा समझाया गया है। ES6 में निम्नलिखित काम करता है किसी मौजूदा ऑब्जेक्ट की कुंजी में से कुछ से मिलकर एक वस्तु बनाने के लिए:एक सबसेट ऑब्जेक्ट बनाएं, जिसमें मौजूदा ऑब्जेक्ट

var o = {a:1, b: 2, c: 3} 
var {a, c} = o 
var subsetObj = {a, c} // will be: {a:1, c:3} 

यहाँ दो कमियां हैं:

  1. यह दो statments, और दो पंक्तियों ले लिया है, वांछित सबसेट ऑब्जेक्ट बनाने के लिए
  2. हमें इंटरमीडिएरी a और c वेरिएबल बनाने के द्वारा स्थानीय चरणीय दायरे को प्रदूषित करना पड़ा, जिन्हें हमारे सबसेट ऑब्जेक्ट को बनाने के साधनों को छोड़कर स्थानीय रूप से आवश्यक नहीं है।

वहाँ अनावश्यक स्थानीय लोगों a और c शुरू करने के बिना एक बयान में इसी कार्य को पूरा करने के लिए एक रास्ता है?

+0

क्यों यह एक विशेष सिंटेक्स आवश्यकता क्यों है? लॉनाश या कुछ का उपयोग क्यों न करें, उदा। 'var o = {a: 1, b: 2, c: 3}; _.pick (ओ, ['ए', 'सी']) ' – loganfsmyth

+0

इसे * की आवश्यकता नहीं है, यह सिर्फ अच्छा होगा। अगर मैं खुद को बहुत जरूरत महसूस करता हूं, तो मैं बस लॉशैश लाने के बजाए एक सहायक काम करता हूं। यह सवाल विशेष रूप से देशी वाक्यविन्यास समर्थन के बारे में था - समस्या स्वयं हल करने के लिए स्पष्ट रूप से तुच्छ है। – Jonah

+1

पूरी तरह से, बस इसका उल्लेख करना चाहता था। – loganfsmyth

उत्तर

3

इसके लिए कोई विशिष्ट वाक्यविन्यास नहीं है। आप कर सकते हैं:

var subsetObj = {a: o.a, c: o.c}; 

यदि आपके पास अधिक गुण या गुणों की एक चर संख्या है, तो एक सहायक कार्य बनाएं।

संबंधित: Is it possible to destructure onto an existing object? (Javascript ES6)

+0

मुझे इससे डर था। यह इस उदाहरण में ठीक है, लेकिन जब आप 'a' और 'c' को लंबे परिवर्तनीय नामों से प्रतिस्थापित करते हैं तो वर्बोज बन जाता है। – Jonah

संबंधित मुद्दे