Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xóa dấu ngoặc khỏi biểu thức toán học trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi biểu thức toán học str làm đối số duy nhất. Nhiệm vụ của hàm là xóa dấu ngoặc khỏi biểu thức nhưng giữ nguyên các phép toán và toán hạng.

Ví dụ, nếu đầu vào là:

Đầu vào

const str = 'u-(v-w-(x+y))-z';

Đầu ra

const output = 'u-v+w+x+y-z';

Ví dụ

Dưới đây là mã thực hiện:

const str = 'u-(v-w-(x+y))-z';
const removeParentheses = (str = '') => {
  let stack = [];
  let lastSign = '+';
  for (let char of str) {
    if (char === '(' || char === ')') {
      lastSign = stack[stack.length - 1] || '+';
    } else if (char === '+') {
      if (stack[stack.length - 1] !== '-' && stack[stack.length - 1] !== '+') {
        stack.push(lastSign);
      }
    } else if (char === '-') {
      if (lastSign === '-') {
        if (stack[stack.length - 1] === '-') stack.pop();
        stack.push('+');
      } else {
        if (stack[stack.length - 1] === '+') stack.pop();
        stack.push('-');
      }
    } else {
      stack.push(char);
    }
  }
  return stack.join('').replace(/^\+/, '');
};
console.log(removeParentheses(str));

Kết quả

u-v+w+x+y-z