जब किसी सरणी को किसी ऑब्जेक्ट में बदलने की बात आती है, तो मुझे स्प्रेड ऑपरेटर और ऑब्जेक्ट.असाइन () जैसे विकल्पों के बारे में पता है, हालांकि, मुझे यह पता लगाने में कठिनाई हो रही है कि मुझे आवश्यक प्रारूप में अंतिम ऑब्जेक्ट को कैसे प्रारूपित किया जाए।
मेरी मूल सरणी इस तरह दिखती है:
let propsArray = [ { id: '1' },
{ 'name.first': 'john' },
{ 'name.last': 'smith' } ]
इस डेटा से मुझे जो वस्तु चाहिए वह इस तरह दिखनी चाहिए:
{
"id" : 1,
"name" : {
"first" : "john",
"last" : "smith"
}
}
ऑब्जेक्ट.असाइन () का उपयोग करके मैंने अब तक जो प्रयास किया है, वह परिणामी वस्तु में संपत्ति कुंजी के रूप में संख्याओं को जोड़ना समाप्त करता है, जो स्पष्ट रूप से वह नहीं है जिसे मैं ढूंढ रहा हूं:
let finalObj = Object.assign({}, propsArray);
मैं परिणामी वस्तु को जिस तरह से यहां चाहता हूं उसे स्वरूपित कैसे प्राप्त कर सकता हूं?
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);
ये कोशिश करें:
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);