5

यह मैं इसे कैसे कर रहा हूँ है:ES6/ES7 में एक या अधिक गुणों को छोड़कर प्रतिलिपि कॉपी ऑब्जेक्ट?

var props = { id: 1, name: 'test', children: [] } 
 

 
//copy props but leave children out 
 
var newProps = { ...props } 
 
delete newProps.children 
 

 
console.log(newProps) // { id: 1, name: 'test' }

वहाँ एक क्लीनर, सरल तरीका है?

+0

मुझे समझ नहीं आता (समान rest/spread properties proposal for ES7 कि आप पहले से ही उपयोग कर रहे थे के साथ)। आपने सबसे महत्वपूर्ण लाइन नहीं लिखी है, जहां आप नएप्रॉप को प्रोप कॉपी करते हैं। "..." क्या है? – Gavriel

+0

@ william.taylor.09, डुप्लिकेट नहीं। वह जानता है कि कैसे प्रतिलिपि बनाना है (उसने अभी उस पंक्ति को नहीं दिखाया है) लेकिन वह ब्लैकलिस्ट – Gavriel

+0

@Gavriel में कुछ को छोड़कर सभी गुणों की प्रतिलिपि बनाना चाहता है @Gavriel यह पंक्ति मूल रूप से उथले गुणों को नई वस्तु 'var newProps = {.. .props} '? 'Var newProps = Object.assign ({}, props)' –

उत्तर

8

आप इस्तेमाल कर सकते हैं एक destructuring assignment:

var props = { id: 1, name: 'test', children: [] } 

var {children:_, ...newProps} = props; 
console.log(newProps) // { id: 1, name: 'test' } 
console.log(_) // [] - as an "empty" placeholder 

+0

हाँ मुझे लगता है कि यह सबसे अच्छा विकल्प है - मैं पहले कुछ ऐसा कर रहा था। मेरी इच्छा है कि कुछ और स्पष्ट हो ... –

+0

मुझे लगता है कि यह पहले से ही स्पष्ट है ... अगर चाहें, तो आप एक उपयुक्त नामित फ़ंक्शन '(कुंजी, {[कुंजी]: _, ... rest} लिख सकते हैं) => बाकी' और उसे बुलाओ। – Bergi

+1

'/ * एस्लिंट नो-अप्रयुक्त-वर्र्स: [" त्रुटि ", {" varsIgnorePattern ":" _ "] * /' इस तकनीक का उपयोग करते समय एस्लिंट त्रुटियों से छुटकारा पाने के लिए उपयोगी है – icc97

1

var props = { id: 1, name: 'test', children: [] } 
 

 
function clone(orig, blacklistedProps) { 
 
    var newProps = {}; 
 
    Object.keys(props).forEach(function(key) { 
 
     if (!blacklistedProps || blacklistedProps.indexOf(key) == -1) { 
 
      newProps[key] = props[key]; 
 
     } 
 
    }); 
 
    return newProps; 
 
} 
 
var newProps = clone(props, ['children']); 
 
console.log(newProps) // { id: 1, name: 'test' } 
 
var newProps1 = clone(props); 
 
console.log(newProps1) // { id: 1, name: 'test', children:[] }

+0

धन्यवाद @ गैवरील होगा। हाँ, उस मामले के लिए मुझे लगता है कि मैं अपने तर्क को क्लोन फ़ंक्शन में लपेट सकता हूं। मैं बस उम्मीद कर रहा था कि एक और संक्षिप्त तरीका था। –

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