मेरे पास कुछ जेसन डेटा है। मुझे बच्चों में से किसी एक में तारों की संख्या गिनने की ज़रूरत है, फिर एक टेबल बनाएं जिसे बच्चे के तारों के हिस्से से समूहीकृत किया जाता है और तालिका में विशिष्ट बाल तारों की गिनती का उपयोग किया जाता है। भ्रमित करने वाला और असंभव जैसा लगता है, हमें यही चाहिए।

ईमानदारी से, मुझे मुश्किल से यकीन है कि यहाँ कहाँ से शुरू किया जाए। स्ट्रिंग्स को सही ढंग से प्रदर्शित करना एक दुःस्वप्न था।

यहां कुछ उदाहरण जेसन है, मैं इसके ऊपर जेसन के स्तर को प्राप्त करने के लिए लूप में उपयोग कर रहा हूं, वह हिस्सा ठीक काम करता है:

"DataValues": [
 {
    "Key": "Stuff Type",
    "Id": "95492",
    "ComboBoxPairs": [
       {
          "Value": {
             "Key": "3 Gallon",
             "Value": "3 Gallon",
             "ExtraValues": []
          },
          "Children": [
             {
                "Key": "Scan",
                "Id": "93478",
                "Strings": [
                   "DogType:Lab,Age:3,Name:Bowser",
                   "DogType:Lab,Age:5,Name:Dingo",
                   "DogType:Mutt,Age:1,Name:Muttman",
                   "DogType:Weiner,Age:1,Name:Goof",
                   "DogType:Mutt,Age:5,Name:Muttman",
                   "DogType:Puppy,Age:1,Name:Silly",
                   "DogType:Puppy,Age:1,Name:Sammy",
                   "DogType:Puppy,Age:1,Name:Shooter",
                   "DogType:Puppy,Age:1,Name:Doc",
                ]
             }
          ]
       },
       {
          "Value": {
             "Key": "1 Gallon",
             "Value": "1 Gallon",
             "ExtraValues": []
          },
          "Children": [
             {
                "Key": "Scan",
                "Id": "93478",
                "Strings": [
                   "DogType:Puppy,Age:1,Name:Wingo",
                   "DogType:Puppy,Age:1,Name:Scrappy",
                   "DogType:Mutt,Age:4,Name:Goober"
                ]
             }
          ]
       }
    ]
 }
]

यहां मुझे निर्माण करने की आवश्यकता है:

DogType ContainerType   Quantity    Volume
Lab         
        3 Gallon        2           6 Gallon
Mutt            
        1 Gallon        1           1 Gallon
        3 Gallon        2           6 Gallon
Weiner          
        3 Gallon        1           3 Gallon
Puppy           
        1 Gallon        2           6 Gallon
        3 Gallon        4           12 Gallon

मैं ईमानदारी से यह भी सुनिश्चित नहीं कर पा रहा हूं कि कहां से शुरू करूं

ईमानदारी से, मुझे यह भी यकीन नहीं है कि क्या यह संभव है? आप देख सकते हैं कि तालिका को स्ट्रिंग के भाग, डॉगटाइप द्वारा समूहीकृत करने की आवश्यकता है। फिर मुझे यह गिनने में सक्षम होना चाहिए कि प्रत्येक कंटेनर टाइप ऑब्जेक्ट में एक निश्चित कुत्ते के प्रकार के साथ कितने तार हैं, और इसे तालिका में मात्रा और कंटेनर टाइप कॉलम में पास करें। फिर वॉल्यूम गैलन वैल्यू को गुणा कर रहा है, जो कि मात्रा से सिर्फ टेक्स्ट है।

मुझे यकीन है कि मुझे और कोड डालने की ज़रूरत है लेकिन मैं यह भी नहीं सोच सकता कि इसे कैसे प्रबंधित किया जाए। कई कंटेनर प्रकार भी हो सकते हैं, यह डेटा स्थिर नहीं है।

डेटा मेरा डिज़ाइन नहीं है, लेकिन मैं इसे बदल नहीं सकता, बस इस बिंदु तक पहुंचना एक आपदा रही है। क्या कोई ऐसा करने का तरीका सोच सकता है?

0
ptrugby4141 16 अगस्त 2019, 23:44

2 जवाब

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

ठीक है, तो आपको कुछ डेटा बदलने की ज़रूरत है। मूल रूप से एक निश्चित डेटा संग्रहीत/प्रतिनिधित्व करने के तरीके को बदलें। अब स्ट्रिंग्स एक सुसंगत प्रारूप में हैं, इसलिए हम एक कुंजी => मूल्य स्टोर प्राप्त करने के लिए स्ट्रिंग संचालन के संयोजन का उपयोग कर सकते हैं (मैं बॉयलरप्लेट को सरल बनाने के लिए ES6 सिंटैक्स का उपयोग करने जा रहा हूं)

let parseString = str => {
    let pairs = str.split(',');
    let obj = {};
    pairs.forEach(pair => {
        pair = pair.split(':');
        obj[pair[0]] = pair[1];
    });
    return obj;
};

उदाहरण के लिए, यह फ़ंक्शन आपके स्ट्रिंग्स में से एक लेता है, "डॉग टाइप: लैब, आयु: 3, नाम: बोसेर", और एक ऑब्जेक्ट जैसे {'DogType': 'Lab', 'Age': 3...} को विभाजित करता है। अब जब हमारे पास यह है, तो हम डेटा में हेरफेर और समूह बनाना शुरू कर सकते हैं (यदि आप सुनिश्चित नहीं हैं कि array.map क्या करता है, तो यह मूल रूप से प्रत्येक सरणी के मानों पर फ़ंक्शन चलाने के बाद एक नया सरणी देता है)।

let comboBoxPairs = data.ComboBoxPairs.map(comboBoxPair => {
    comboBoxPair.Children = comboBoxPair.Children.map(children => parseString(children));
    return comboBoxPair;
});

अब हमने स्ट्रिंग्स के अतुलनीय सरणी को वस्तुओं की एक सरणी में बदल दिया है जिसे हम समूह बनाना शुरू कर सकते हैं। सबसे पहले हमें डेटा संरचना को समझने की जरूरत है। आप पहले कुत्ते के प्रकार के आधार पर समूह बना रहे हैं, इसलिए हमारे ऑब्जेक्ट की कुंजियाँ डॉग्स टाइप हैं। फिर हमें बस प्रत्येक मात्रा को कुत्ते के प्रकार में जोड़ना होगा और हर बार मात्रा का सामना करने पर गिनती बढ़ानी होगी।

let dogType = {};
comboBoxPairs.forEach(comboBoxPair => {
    comboBoxPair.Children.forEach(children => {
        if (typeof dogType[children.DogType] === 'undefined') {
             dogType[children.DogType] = {};
        }
        if (typeof dogType[children.DogType][comboBoxPair.Value.Key] === 'undefined') {
             dogType[children.DogType][comboBoxPair.Value.Key] = 0;
        }
        dogType[children.DogType][comboBoxPair.Value.Key]++;
   });
});

और आपने कल लिया! यह आपको एक वस्तु देता है जैसे:

{
    'Lab': {
        '1 Gallon': 2,
         ....
     },
};

फिर आप इस ऑब्जेक्ट के माध्यम से मान और योग प्रदर्शित करने के लिए लूप कर सकते हैं।

0
Shitiz Garg 17 अगस्त 2019, 00:31

क्या आपका टेबल उदाहरण उदाहरण है या यह आपके नमूना डेटा का प्रतिनिधित्व करने के लिए है?

आपकी तालिका नमूना डेटा से मेल नहीं खाती है, इसलिए मुझे संदेह है कि मेरी समझ सही है या नहीं?

अगर मैं एक सामान्यीकृत उत्तर से शुरू कर सकता हूं - जो पर्याप्त नहीं हो सकता है लेकिन यह आपको सही दिशा में ले जा सकता है ~ 1. यदि आप अपने परिणामों को आउटपुट करने से पहले डेटा को पूर्ण रूप से पार्स कर सकते हैं तो आप एक सारांश सरणी बना सकते हैं जो आपके 'अन-ऑर्डर किए गए' इनपुट डेटा को तुच्छ बनाता है - फिर प्रस्तुति एक अलग कदम बन जाती है। 2. यदि आपको इसे एक पास में करना है - तो आप सामान्य रूप से पहले डेटा को सॉर्ट करने के बारे में सोचेंगे - इनपुट पर - ऐसा इसलिए है ताकि आप गैर-सन्निहित बिंदुओं पर दिखाई देने वाले म्यूट को संभाल सकें।

सही बात?

मेरी व्यक्तिगत प्राथमिकता आपके रनिंग टोटल को एक अलग डेटा संरचना में बनाना होगा - चाहे आपके पास परिदृश्य 1 या 2 हो ताकि आप वेतन वृद्धि को फंसा सकें, चाहे आप अपनी प्रासंगिक कुंजियों को किस स्तर पर ढूंढ सकें।

संक्षेप में - क्या आपके सारांश के लिए एक नई वस्तु के निर्माण में कोई वैचारिक समस्या है?

-1
Cammi Mitchell 17 अगस्त 2019, 00:04