कैसे समूहबद्ध करें और सरणी को इस तरह रूपांतरित करें:

[{तारीख: '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
Exception PCB 15 अप्रैल 2021, 18:08

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" }
    ]
  }
]
0
Brandon McConnell 16 अप्रैल 2021, 10:43
कृपया मुझे बताएं कि क्या मेरा समाधान आपके लिए काम करता है, या यदि यह वह प्रारूप नहीं है जिसे आप ढूंढ रहे थे। मेरा मानना ​​​​है कि आपके प्रश्न में शामिल वांछित प्रारूप में कुछ वाक्यविन्यास समस्याएं हो सकती हैं, इसलिए यदि यह वही नहीं है जो आप ढूंढ रहे हैं, तो मुझे इसे समायोजित करने में खुशी हो रही है :)
 – 
Brandon McConnell
15 अप्रैल 2021, 18:52
हाय ब्रैंडन, जो मैं ढूंढ रहा हूं उसके करीब है, सिवाय इसके कि आपका आउटपुट इस तरह दिखता है: 0: "आइटम 2" 1: "टेस्ट 2" 2: "आइटम 2" 3: "टेस्ट 4", क्या आप ऐसा कर सकते हैं: 0: {आइटम 1 : 'test1', item2:'test2'}, 1: {item1: 'test3',item2: 'test4'}? प्रारूप के बारे में खेद है, मैं यहाँ काफी नया हूँ।
 – 
Exception PCB
15 अप्रैल 2021, 18:58
धन्यवाद, मैंने अपने समाधान में अतिरिक्त उदाहरण जोड़े हैं और मेरे मूल समाधान में एक बग तय किया है। मैं अभी भी वांछित प्रारूप पर थोड़ा अस्पष्ट था, इसलिए मैंने उन तीनों को प्रदान किया जिनके बारे में मैं सोच सकता था। मुझे बताएं कि क्या इनमें से एक सही है!
 – 
Brandon McConnell
16 अप्रैल 2021, 10:44