2017-09-04 13 views
6

उदाहरण के लिए से गुण का हिस्सा संहार करने के लिए कैसे, मैं इस तरह एक वस्तु मिल गया।एक वस्तु

obj2 = { 
    name: '', 
    age: '', 
    } 

मैं जानता हूँ कि मैं इसे obj2.name = obj1.name, जो वर्बोज़ हो जाएगा कई गुण दोहराया करने की आवश्यकता है की तरह कर सकते हैं। क्या इस समस्या को हल करने के लिए कोई और त्वरित तरीका है? मैं

let {name: obj2.name, age: obj2.age} = obj1;

कोशिश की, लेकिन त्रुटि मिली।

obj2 = { name: obj1.name, age: obj1.age } 

अब, obj2 चाहता था धारण गुण:

+0

आप गुणों या एक काले सूची के लिए एक सफेद सूची का उपयोग कर सकते हैं। फिर पुनरावृत्त करें। –

+0

[इस] पर एक नज़र डालें (https://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object) – Max

+0

कुछ गुण लेने के लिए [एक-लाइनर] पर एक नज़र डालें ES6 में ऑब्जेक्ट से] (https://stackoverflow.com/q/25553910/1048572) – Bergi

उत्तर

5

वास्तव में आप वस्तु destructuring, बस सरल काम की जरूरत नहीं है

console.log(obj2); 
// Prints {name: "Bob", age: 20} 

आप obj2 के पुराने गुण मर्ज करना चाहते हैं नए लोगों के साथ, आप कर सकते हैं:

obj2 = { ...obj2, name: obj1.name, age: obj1.age } 
2

ड्रॉप let (आप की घोषणा नहीं कर रहे हैं चर) और surround with parentheses:

({name: obj2.name, age: obj2.age} = obj1); 
+0

आपका कोड काम नहीं करता है, यह '(obj1 = {name: obj2.name, आयु: obj2.age} होना चाहिए); ' – alexmac

+0

यह काम करता है! क्या आप कृपया बताएंगे कि क्यों या क्या ब्रांड्स ने किया था। –

+0

@alexmac यह काम करता है। कोशिश करो। यह विनाशकारी है। – Bergi

0

मुझे लगता है कि आप ES6 वस्तु destructuring सिंटैक्स का उपयोग कर सकते हैं

var obj = { name: 'kailash', age: 25, des: 'backenddev'} 
    ({name} = obj); 
+0

जो वैश्विक 'नाम' चर को असाइन करता है? – Bergi

+0

हाँ यह वैश्विक नाम var –

+0

को असाइन करता है हां - ऐसा न करें :-) – Bergi

0

आप के लिए टेम्पलेट के रूप में लक्ष्य वस्तु इस्तेमाल कर सकते हैं गुण और लक्ष्य ऑब्जेक्ट के डिफ़ॉल्ट मान के साथ obj1 के मान असाइन करें।

var obj1 = { name: 'Bob', age: 20, career: 'teacher' }, 
 
    obj2 = { name: '', age: '' }; 
 
    
 
Object.keys(obj2).forEach(k => obj2[k] = obj1[k] || obj2[k]); 
 

 
console.log(obj2);

0

एक अन्य समाधान इस के लिए एक reuable विधि लिखने के लिए होगा। आप एक ऑब्जेक्ट और विधियों की प्रतिलिपि बना सकते हैं जिन्हें आप प्रतिलिपि बनाना चाहते हैं।

const duplicatePropertiesFromObject = (obj, propertyNames = [], newObj = {}) => { 
    Object.keys(obj).forEach((key) => { 
    if (propertyNames.includes(key)) { 
     newObj[key] = obj[key]; 
    } 
    }); 
    return newObj; 
}