Добавить / заменить оператор в начало строки с условными - PullRequest
0 голосов
/ 03 октября 2018

Немного раздутый вопрос, поэтому я изложу его поэтапно

У меня есть три переменные

let operators: = ['+', '−', '*', '/'];

Текущий пользовательский ввод (давайте назовем его currentUserInput)

и newUserInput (независимо от того, что пользователь только что набрал)

Мне нужно:

  1. Проверить, содержит ли newUserInput какой-либо из операторов
  2. Если это так, добавьте его в начало currentUserInput, в противном случае добавьте его в конец
  3. Если в начале currentUserInput уже есть оператор, замените его новым.

Пример

Если currentUserInput равен +1234 и пользователь вводит / в любом месте поля ввода, новый currentUserInput должен быть /1234

Я использовал if(operators.some(function(v) { return newUserInput.indexOf(v) >= 0; }))

Для шага 1, который даст мне логический ответ, но мне нужен оператор в качестве ответа.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Это решение использует RegExp для замены оператора в начале строки или в начале строки, если оператор не найден.

const operators = ['+', '\\-', '*', '/'].join('');
const searchPattern = new RegExp(`[${operators}]`);
const replacePattern = new RegExp(`(^[${operators}]|^)`);

const replaceOperator = (currentUserInput, newUserInput) => {
  const operator = newUserInput.match(searchPattern);
  
  if(!operator) return currentUserInput;
  
  return currentUserInput.replace(replacePattern, operator[0]);
}

console.log(replaceOperator("-string", "+"));
console.log(replaceOperator("-string", "s"));
console.log(replaceOperator("string", "+"));
console.log(replaceOperator("string", "s"));
0 голосов
/ 03 октября 2018

Вот еще один подход, использующий только includes и базовую обработку ES6:

let ops = ['-', '+', '*', '/']
 
const fn = (c, n) => ops.includes(n) ? ops.includes(c[0]) ? `${n}${c.substr(1)}` : `${n}${c}` : `${c}${n}`

console.log(fn("-string", "+"));
console.log(fn("-string", " and stuff"));
console.log(fn("string", "-"));
console.log(fn("string", " baby")); 
0 голосов
/ 03 октября 2018

Итак, идея заключается в добавлении в конец строки, если у них нет оператора в качестве нового ввода?И если у них уже есть оператор, замените текущий оператор, в противном случае добавьте его.Предполагая, что вы хотите сделать это, попробуйте этот код:

function processInput(currentInput, newUserInput) {
  let operators = ['+', '-', '*', '/'];

  if(operators.includes(newUserInput)) {
    var containsOperator = operators.some(operator => operator == currentInput[0]);
    return newUserInput + (containsOperator ? currentInput.substr(1) : currentInput);
  } else {
    return currentInput + newUserInput;
  }
}

console.log(processInput("-string", "+"));
console.log(processInput("-string", "s"));
console.log(processInput("string", "+"));
console.log(processInput("string", "s"));
...