2016-10-11 8 views
6

लॉज़ैश में _.merge कार्यक्षमता है। मैं ES6 या ES7 में एक ही चीज़ प्राप्त करना चाहता हूं।(ES6/ES7 में _.merge) ऑब्जेक्ट। असाइन किए गए मानों को ओवरराइड किए बिना असाइन करें

इस स्निपेट के बाद:

Object.assign({}, {key: 2}, {key: undefined}) 

मैं {key: 2} प्राप्त करना चाहते हैं। वर्तमान में मुझे {key: undefined}

यह एक गहरी विलय प्राप्त नहीं करता है।

क्या यह संभव है? यदि हां तो उसे कैसे प्राप्त किया जाए?

+0

नोट: यह प्रश्न मेरे मामले को अपरिभाषित के साथ कवर नहीं करता है: http://stackoverflow.com/questions/13852852/surely-es6-must-have-a-way-to-merge-two-javascript-objects- साथ में -वह-है-यह? noredirect = 1 और lq = 1 –

+0

आप दूसरी ऑब्जेक्ट ले सकते हैं, 'अपरिभाषित' वाले किसी भी मान को छीन सकते हैं और फिर इसे 'ऑब्जेक्ट.साइन' – vlaz

+0

में उपयोग करें @vlaz वहाँ मूल ES6 तरीका undefiend मानों को छीनने के लिए है वस्तु से? –

उत्तर

6

आप इसे Object.assign के सीधे उपयोग के साथ प्राप्त नहीं कर सकते हैं, क्योंकि प्रत्येक अगला ऑब्जेक्ट पिछली विलय के लिए समान कुंजी को फिर से लिख देगा। एकमात्र तरीका, अपनी आने वाली वस्तुओं को कुछ हाथ से तैयार किए गए फ़ंक्शन के साथ फ़िल्टर करने के लिए।

function filterObject(obj) { 
    const ret = {}; 
    Object.keys(obj) 
     .filter((key) => obj[key] !== undefined) 
     .forEach((key) => ret[key] = obj[key]; 
    return ret; 
} 
+0

आप भविष्यवाणी को तर्क के रूप में भी पास कर सकते हैं, ताकि यह 'Array.filter' – georg

5

आप बस undefined मानों वाली कुंजियों को फ़िल्टर कर सकते उन्हें Object.assign() को पार करने से पहले:

const assign = (target, ...sources) => 
 
    Object.assign(target, ...sources.map(x => 
 
    Object.entries(x) 
 
     .filter(([key, value]) => value !== undefined) 
 
     .reduce((obj, [key, value]) => (obj[key] = value, obj), {}) 
 
)) 
 

 
console.log(assign({}, {key: 2}, {key: undefined}))

3

एक छोटे उपयोगिता लिखें अपरिभाषित मूल्यों को दूर करने के:

function removeUndefined(obj) { 
    for (let k in obj) if (obj[k] === undefined) delete obj[k]; 
    return obj; 
} 

n

Object.assign({}, {key: 2}, removeUndefined({key: undefined})) 

यह तार-इन व्यवहार के साथ अपने स्वयं assign लेखन अपरिभाषित मूल्यों को दूर करने के लिए बेहतर लगता है।

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