कैसे समूहबद्ध करें और सरणी को इस तरह रूपांतरित करें:
[{तारीख: '14/4/2021', आइटम1:'टेस्ट1', आइटम2:'टेस्ट2'}, {तारीख: '14/4/2021', आइटम1:'टेस्ट3', आइटम2:'टेस्ट4'}, { दिनांक: '15/4/2021', आइटम 1: 'टेस्ट 1', आइटम 2: 'टेस्ट 2'},]
इसमें इसमें (समूह के अनुसार तिथि):
[ {तिथि: '14/4/2021', आइटम: [{तिथि: '14/4/2021', आइटम 1: 'टेस्ट 1', आइटम 2: 'टेस्ट 2'}, {तारीख: '14/4/2021', आइटम: [{तिथि: '14/4/2021', आइटम 1: 'टेस्ट 3', आइटम 2: 'टेस्ट 4'}], {दिनांक: '15/4/2021', आइटम: [{तिथि: '15/4/ 2021', आइटम1:'टेस्ट1', आइटम2:'टेस्ट2'}] ]
1 उत्तर
यह वही हो सकता है जिसे आप ढूंढ रहे हैं। हम प्रति दिनांक इच्छित डेटा को अलग करने के लिए map()
और filter()
जैसी सरणी विधियों का उपयोग कर सकते हैं और फिर उसे संबंधित तिथि के अनुसार स्ट्रिंग के एकल आइटम सरणी में समेकित कर सकते हैं।
1. आइटम केवल प्रति दिनांक मानों की एकल सरणी के रूप में
सबसे पहले, मैंने ES6 […new Set([])]
विधि का उपयोग करके किसी भी डुप्लीकेट को छोड़कर, सभी तिथियों की एक सरणी बनाई और फिर मैंने दिनांक के साथ प्रत्येक दिनांक स्ट्रिंग को ऑब्जेक्ट में बदलने के लिए तिथियों की उस सरणी पर map()
विधि का उपयोग किया। एक गुण के रूप में सेट करें, और फिर अपने मूल सरणी से आइटम डेटा को प्रत्येक दिनांक ऑब्जेक्ट के आइटम सरणी के अंतर्गत एक नई सरणी में वापस मैप करें।
इसकी जांच - पड़ताल करें:
const ungrouped = [
{ date: '14/4/2021', item1: 'test1', item2: 'test2' },
{ date: '14/4/2021', item1: 'test3', item2: 'test4' },
{ date: '15/4/2021', item1: 'test1', item2: 'test2' }
];
const groupArrayByDate = (arr => [...new Set(arr.map(e => e.date))].map(date => ({ date: date, items: arr.filter(e => e.date === date).flatMap(e => Object.entries(e).filter(f => f[0] !== 'date')).map(e => e[1]) })));
const grouped = groupArrayByDate(ungrouped);
console.log(grouped);
यह आउटपुट:
[
{
date: "14/4/2021",
items: ["test1", "test2", "test3", "test4"]
},
{
date: "15/4/2021",
items: ["test1", "test2"]
}
]
2. प्रति दिनांक एक ही वस्तु के रूप में आइटम
यदि आप 1
(इंडेक्स + 1
) से शुरू होने वाले क्रमांकित कुंजी मानों के साथ अपने सभी आइटम एक साथ एक ऑब्जेक्ट में सूचीबद्ध करना चाहते हैं, तो इस समाधान का उपयोग करें:
const ungrouped = [
{ date: '14/4/2021', item1: 'test1', item2: 'test2' },
{ date: '14/4/2021', item1: 'test3', item2: 'test4' },
{ date: '15/4/2021', item1: 'test1', item2: 'test2' }
];
const groupArrayByDate = arr => [...new Set(arr.map(e => e.date))].map(date => ({ date: date, items: Object.fromEntries(arr.filter(e => e.date === date).flatMap(e => Object.entries(e).filter(f => f[0] !== 'date')).map((e,i) => [`item${i+1}`,e[1]])) }));
const grouped = groupArrayByDate(ungrouped);
console.log(grouped);
यह आउटपुट:
[
{
date: "14/4/2021",
items: { item1: "test1", item2: "test2", item3: "test3", item4: "test4" }
},
{
date: "15/4/2021",
items: { item1: "test1", item2: "test2" }
}
]
3. प्रति दिनांक एकाधिक ऑब्जेक्ट के रूप में आइटम (प्रति दिनांक ऑब्जेक्ट की मूल कुंजी)
और अगर आप अलग-अलग ऑब्जेक्ट्स को items
एरे के तहत अलग छोड़ना चाहते हैं, तो यह आपके लिए भी काम करेगा। यह अनिवार्य रूप से मेरे उपरोक्त उत्तर जैसा ही है लेकिन अंत में अतिरिक्त मैपिंग के बिना:
const ungrouped = [
{ date: '14/4/2021', item1: 'test1', item2: 'test2' },
{ date: '14/4/2021', item1: 'test3', item2: 'test4' },
{ date: '15/4/2021', item1: 'test1', item2: 'test2' }
];
const groupArrayByDate = arr => [...new Set(arr.map(e => e.date))].map(date => ({ date: date, items: arr.filter(e => e.date === date).map(e => Object.entries(e).filter(f => f[0] !== 'date')).map(f => Object.fromEntries(f)) }));
const grouped = groupArrayByDate(ungrouped);
console.log(grouped);
यह आउटपुट:
[
{
date: "14/4/2021",
items: [
{ item1: "test1", item2: "test2" },
{ item1: "test3", item2: "test4" }
]
},
{
date: "15/4/2021",
items: [
{ item1: "test1", item2: "test2" }
]
}
]