मैं एक व्यक्तिगत परियोजना को लपेट रहा हूं और किसी भी बग के लिए परीक्षण कर रहा हूं, मैंने बहुमत बग को ठीक कर दिया है और यह पता नहीं लगा सकता कि इसे कैसे हल किया जाए, जो कंसोल में सही मायने रखता है, इकाई और घटक को आउटपुट करता है, लेकिन काम नहीं करता है जब वेबपेज पर आउटपुट:

8 oz cream cheese, softened 
0.25 tsp garlic powder
undefined tsp dried oregano
undefined tsp dried basil
1 cup parmesan cheese

parseIngredients से पहले (वेब ​​कंसोल से):

0: "8 ounces cream cheese, softened"
1: "1/4 teaspoon garlic powder"
2: " teaspoon dried oregano"
3: " teaspoon dried parsley"
4: " teaspoon dried basil"
5: "1 cup shredded mozzarella cheese"

मुझे संदेह है कि डीओएम हेरफेर के साथ कुछ गलत हो सकता है, इसलिए मैं वापस गया और कई बार जांच की और समस्या नहीं मिली।

Recipe.js

    parseIngredients(){
        const unitsLong = ['tablespoons','tablespoon','ounces','ounce','teaspoons','teaspoon','cups','pounds'];
        const unitsShort = ['tbsp','tbsp','oz','oz','tsp','tsp','cup','pound'];
        const units = [...unitsShort,'kg','g'];

        const newIngredients = this.ingredients.map( el=>{

            // uniform units 
            let ingredient = el.toLowerCase();
            unitsLong.forEach((unit,i) =>{
                ingredient = ingredient.replace(unit,unitsShort[i]);
            });

            // remove parentheses
            ingredient = ingredient.replace(/ *\([^)]*\) */g, ' '); // regular expression


            // Parse the ingredient into count, unit and ingredient
            const arrIng = ingredient.split(' ');
            const unitIndex = arrIng.findIndex(el2 => units.includes(el2));// return true or false 


            let objIng; 
            if(unitIndex > -1){
                // there is a unit 
                const arrCount = arrIng.slice(0,unitIndex); // Ex. 4 1/2 cups, arrCount is [4,1/2] & 4 cups, arrCount is [4]

                let count; 
                if(arrCount.length === 1){
                    count = eval(arrIng[0].replace('-','+'));
                } else{
                    count =  eval(arrIng.slice(0,unitIndex).join('+'));
                }

                objIng ={
                    count, 
                    unit:arrIng[unitIndex],
                    ingredient:arrIng.slice(unitIndex +1).join(' ')
                };


            } else if(parseInt(arrIng[0],10)){
                // thre is no unit but 1st element is number 
                objIng ={
                    count:parseInt(arrIng[0],10),
                    unit:'',
                    ingredient:arrIng.slice(1).join(' ')
                }

            }else if(unitIndex === -1){
                // There is no Unit and no number at 1st element 
                objIng ={
                    count:1,
                    unit:'',
                    ingredient
                }
            }


            return objIng; 

        });

        this.ingredients = newIngredients; 
    }
}

अपडेट किया गया: समुदाय से सभी उत्साही मदद और समस्या पर बरमार की शानदार पकड़ के लिए धन्यवाद। मैंने थोड़ी खुदाई की और पता चला कि food2fork ने सामग्री के लिए राशि निर्दिष्ट नहीं की है। तो समस्या यह है कि स्ट्रिंग में एक इकाई होगी लेकिन कोई राशि नहीं होगी। निम्नलिखित मेरे फिक्स हैं लेकिन "अपरिभाषित" समस्या को हल नहीं कर रहे थे।

                let count; 
                if(arrCount.length === 1){
                    count = eval(arrIng[0].replace('-','+'));
                } else if(arrCount.length === undefined){
                    count = 1; 
                }
                else{
                    count =  eval(arrIng.slice(0,unitIndex).join('+'));
                }

                objIng ={
                    count, 
                    unit:arrIng[unitIndex],
                    ingredient:arrIng.slice(unitIndex +1).join(' ')
                };

मैंने निम्नलिखित की भी कोशिश की:

arrCount.length === 0 ;
arrCount === null;

फिर भी, अपरिभाषित प्रस्तुत करें

मैं वेब-देव के लिए नया हूं और मैं वास्तव में इस कोड को देखने के लिए अधिक अनुभवी दिमाग और आंखों का उपयोग कर सकता हूं। और समस्या को देखने वाले सभी लोगों के लिए फिर से बहुत-बहुत धन्यवाद। आपका दिन शुभ हो और कोडिंग की शुभकामनाएँ !!!

अपडेट की गई टिप्पणियां और अपडेट का कारण:

  1. यह समस्या डिबगिंग से एल्गोरिथम समस्याओं तक चली गई, भविष्य में दूसरों की मदद कर सकती है।

  2. नया प्रश्न काफी असंबंधित कोड में कटौती करता है।

  3. रेंडरिंग कोड हटाएं, क्योंकि बाद में पता चला कि समस्या नहीं है।

1
Bobby_the_builder 5 जुलाई 2019, 19:29

1 उत्तर

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

मुझे समस्या का समाधान मिल गया है, बेझिझक प्रश्न में कोड देखें। Recipe.js में और सशर्त विवरण में कि हम सामग्री को गणना, इकाई और घटक में पार्स करने का निर्णय कैसे लेते हैं:

arrCount.length हमेशा 1 के बराबर होगा क्योंकि किसी कारण से पार्स करने से पहले सामग्री में '' होता है और UnitIndex से पहले पढ़ते समय, इसे count के रूप में गिना जाता है।

इसलिए फिक्स होगा:

                let count; 
                if(arrCount.length == 1 && arrCount[0] == 0){
                    count = 1;
                } else if(arrCount.length == 1){
                    count = eval(arrIng[0].replace('-','+'));
                }
                else{
                    count =  eval(arrIng.slice(0,unitIndex).join('+'));
                }

                objIng ={
                    count, 
                    unit:arrIng[unitIndex],
                    ingredient:arrIng.slice(unitIndex +1).join(' ')
                };

अंत में, बाड़मार के लिए धन्यवाद कि मुझे इसे ठीक करने का नया विचार प्रदान करते रहें। हैप्पी कोडिंग @Barmar, और धन्यवाद।

0
Bobby_the_builder 5 जुलाई 2019, 19:03