मैं एक कैलकुलेटर बनाने की कोशिश कर रहा हूँ और अटक गया। मैं यह नहीं समझ सकता कि अंतिम वर्ण (जो गणित का प्रतीक है) को कैसे बदला जाए। उदाहरण के लिए, यदि कोई व्यक्ति '+' पर क्लिक करता है और फिर '-' पर क्लिक करता है, तो उसे '+-' के रूप में प्रदर्शित नहीं किया जाना चाहिए।

मैंने कोशिश की:

  • inputDisplay.textContent = inputDisplay.textContent.replace(/(\+|\-|\*|\/)$/, this.value);;

स्ट्रिंग के अंत में किसी भी गणित ऑपरेटर का चयन करें और इसे 'this.value' (जो एक गणित प्रतीक भी है) से बदलें। आउटपुट है: '1+-/+*'...

  • let lastSymbol = inputDisplay.textContent.slice(-1); inputDisplay.textContent = inputDisplay.textContent.replace(lastSymbol, this.value);

console.log(lastSymbol) गणित प्रतीकों (एक समय में एक) को लॉग करता है, लेकिन जब मैं 'lastSymbol' चर को बदलने के लिए .replace() विधि का उपयोग करता हूं, तो गणित के प्रतीकों को संयोजित किया जाता है, प्रतिस्थापित नहीं किया जाता है: '1+-+*'.. .

  • let stringWithoutLastCharacter = inputDisplay.textContent.slice(0, -1); inputDisplay.textContent = stringWithoutLastCharacter + this.value;

गणित के प्रतीक भी जुड़े हुए हैं: '1+-+'...

मुझे नहीं पता कि इसे कैसे हल किया जाए, इसलिए मैं मदद मांग रहा हूं। धन्यवाद।

0
an_bozh 10 फरवरी 2019, 16:29

1 उत्तर

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

आपकी समस्या प्रतिस्थापन नहीं है, बल्कि वर्तमान ऑपरेटर को पहले जोड़ना है:

if (!symbols.includes(this.value) ) {
// 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
// display elements consequently    
inputDisplay.textContent += this.value;     
}

इसके बजाय आपको ऑपरेटर की भी जांच करनी चाहिए और if-statement में प्रतिस्थापित करना चाहिए:

if (!symbols.includes(this.value)) {
// 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
// display elements consequently    
   let lastChar= inputDisplay.textContent.length && inputDisplay.textContent.length >0 ?inputDisplay.textContent[inputDisplay.textContent.length] : '';

   if(mathSymbols.includes(this.value)&& mathSymbols.includes(lastChar)){
      inputDisplay.textContent[inputDisplay.textContent.length]=this.value;
   }
   else{
inputDisplay.textContent += this.value;     
   }
}

केवल फ़ोन पर लिखा गया है, इसलिए कृपया टंकण के लिए क्षमा करें!

संपादित करें:

मैंने आपके प्रयासों में से एक का उपयोग किया है, क्योंकि प्रतिस्थापन अंतिम वर्ण की अनुक्रमणिका के साथ काम नहीं करता है। इसके अलावा, यह ...length-1 है, जिसे नए संस्करण में देखा जा सकता है:

if (!symbols.includes(this.value) ) {
    // 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
       let lastChar = inputDisplay.textContent.length && inputDisplay.textContent.length > 0 ? inputDisplay.textContent[inputDisplay.textContent.length-1] : '';
     console.log('inputDisplay.textContent.length: ' + inputDisplay.textContent.length);
     //console.log('last char: ' + lastChar);
       if (inputDisplay.textContent.length>0 && mathSymbols.includes(this.value) && mathSymbols.includes(lastChar)) {
          //inputDisplay.textContent[inputDisplay.textContent.length-1] = this.value; 
         let stringWithoutLastCharacter = inputDisplay.textContent.slice(0, -1);
inputDisplay.textContent = stringWithoutLastCharacter + this.value;
        // console.log('lastCharacter: '+ inputDisplay.textContent[inputDisplay.textContent.length-1]);
           //console.log('this value: ' + this.value);     
       } else {
           // display elements consequently  
        inputDisplay.textContent += this.value; 
        // console.log('else, this value: ' + this.value);    
        }
    }      
0
Nikolaus 11 फरवरी 2019, 12:28