जब किसी सरणी को किसी ऑब्जेक्ट में बदलने की बात आती है, तो मुझे स्प्रेड ऑपरेटर और ऑब्जेक्ट.असाइन () जैसे विकल्पों के बारे में पता है, हालांकि, मुझे यह पता लगाने में कठिनाई हो रही है कि मुझे आवश्यक प्रारूप में अंतिम ऑब्जेक्ट को कैसे प्रारूपित किया जाए।

मेरी मूल सरणी इस तरह दिखती है:

let propsArray = [ { id: '1' },
  { 'name.first': 'john' },
  { 'name.last': 'smith' } ]

इस डेटा से मुझे जो वस्तु चाहिए वह इस तरह दिखनी चाहिए:

{
  "id" : 1,
  "name" : {
      "first" : "john",
      "last" : "smith"
  }
}

ऑब्जेक्ट.असाइन () का उपयोग करके मैंने अब तक जो प्रयास किया है, वह परिणामी वस्तु में संपत्ति कुंजी के रूप में संख्याओं को जोड़ना समाप्त करता है, जो स्पष्ट रूप से वह नहीं है जिसे मैं ढूंढ रहा हूं:

  let finalObj = Object.assign({}, propsArray);

मैं परिणामी वस्तु को जिस तरह से यहां चाहता हूं उसे स्वरूपित कैसे प्राप्त कर सकता हूं?

2
Rey 10 जुलाई 2019, 22:56

2 जवाब

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

आपको वस्तु में गहराई से देखने की जरूरत है और विभाजित कुंजी लें और किसी वस्तु को संपत्ति या खाली वस्तु के साथ ले कर उन्हें कम करें। अंत में मान असाइन करें।

var data = [{ id: '1' }, { 'name.first': 'john' }, { 'name.last': 'smith' }],
    result = data.reduce((r, o) => {
        Object.entries(o).forEach(([k, v]) => {
            var keys = k.split('.'),
                last = keys.pop();
            keys.reduce((q, k) => q[k] = q[k] || {}, r)[last] = v;        
        });
        return r;
    }, {});

console.log(result);
6
Nina Scholz 10 जुलाई 2019, 23:04

ये कोशिश करें:

const data = [
  {
    "id": "1"
  },
  {
    "name.first": "john"
  },
  {
    "name.last": "smith"
  }
]

const result = Object.entries(Object.assign({}, ...data))
.reduce((acc,[k,v])=>{
    [first, last] = k.split('.');
    if (!last) {
        acc[k] = v
    } else {
        acc[first] = acc[first] || {};
        acc[first][last] = v;
    }
    return acc
}, {})

console.log(result);
1
Ghoul Ahmed 10 जुलाई 2019, 23:22