मैं अन्य ऑब्जेक्ट कुंजियों से उत्पन्न ऑब्जेक्ट बनाने का प्रयास कर रहा हूं।
उपभोग:

const obj = {
    someProp1: 'a',
    someProp2: 'b'
}

और वांछित परिणाम:

const result = {
    a: {},
    b: {}
}

मैं इस एक पंक्ति को lodash के साथ कोड करने में कामयाब रहा, लेकिन मैं इसे बिना किसी निर्भरता के करना चाहता हूं।

_.reduce(obj, (acc, value) => _.set(acc, value, {}), {});

मैंने इसे मूल रूप से बनाने की कोशिश की, लेकिन मूल्य 'मूल्य' संपत्ति के रूप में आता है .. वैसे - मुझे लगता है कि keyBy ऐसा कुछ करने में सक्षम होना चाहिए लेकिन मैं एक खाली वस्तु को वांछित मूल्य के रूप में परिभाषित नहीं कर सका।

Object.values(obj).reduce((acc, value) => Object.assign(acc, {value: {}}), {})

मैं क्या गलत कर रहा हूं?

3
Yinon 11 अक्टूबर 2018, 15:02

4 जवाब

सबसे बढ़िया उत्तर

आप मान विज्ञापन कुंजी को गणना के साथ मैप कर सकते हैं संपत्ति का नाम एकल ऑब्जेक्ट में और सभी ऑब्जेक्ट को Object.assign.

const
    object = { someProp1: 'a', someProp2: 'b' },
    result = Object.assign(...Object.values(object).map(k => ({ [k]: {} })));
    
console.log(result);

अपने दृष्टिकोण से, आप value के बजाय key . के रूप में एक गणना की गई संपत्ति का उपयोग कर सकते हैं

const
    object = { someProp1: 'a', someProp2: 'b' },
    result = Object.values(object).reduce((acc, value) =>
        Object.assign(acc, { [value]: {}}), {})
    
console.log(result);
2
Nina Scholz 11 अक्टूबर 2018, 15:06

आपका समाधान अच्छा था लेकिन आप [] भूल गए।

आपका समाधान:

Object.values(obj).reduce((acc, value) => Object.assign(acc, {value: {}}), {})

जोड़:

Object.values(obj).reduce((acc, value) => Object.assign(acc, {[value]: {}}), {})

व्याख्या:

[value] कुंजी नाम जनरेट करने के लिए वेरिएबल value के मान का उपयोग करेगा। (value शब्द को कुंजी के रूप में उपयोग करने के बजाय - जो आप नहीं चाहते हैं)।


इसे हल करने का एक अधिक कार्यात्मक तरीका acc reduce ऑपरेशन के अंदर वस्तु को बदलना नहीं है: (+ नामों को थोड़ा बदलना)

const convertObjectValuesToKeys = obj => Object.values(obj)
    .reduce((result, objectValue) => ({
        ...result,
        [objectValue]:{}
    }), {});
    
const obj = {a: 'a1',b:'b1'};

console.log(convertObjectValuesToKeys(obj));
1
Stav Alfi 11 अक्टूबर 2018, 15:29

ES6 के स्प्रेड और कंप्यूटेड की फीचर का उपयोग करना।

const obj = {
    someProp1: 'a',
    someProp2: 'b'
}

Object.values (obj)
.reduce ((res,val) => ({...res, [val]: {}}), {})

//{a: {},b: {}}
0
Moritz Roessler 11 अक्टूबर 2018, 15:21
const obj = {
  someProp1: 'a',
  someProp2: 'b'
}

var result = Object.values(obj).reduce((map, value) => {map[value] = {}; return map;}, {});

// { a: {}, b: {} }
0
Seth Flowers 11 अक्टूबर 2018, 16:00