Javascript: 将字符串转换为数组

Javascript: converting string to an array

这是我的计算器项目的功能之一。首先我需要将输入的字符串转换成一个数组,然后再进行操作。 (假设输入现在只有数字和“+”号。

我的问题是,我该如何改进这段代码?还有什么其他方法可以解决这个问题? (时间复杂度、简洁性、更短的代码……随便)

function convertArray(input) {
  let array = [];
  let num = "";
  for (let i = 0; i < input.length; i++) {
    if (input.charAt(i) == '+') {
      array.push(input.charAt(i));
    } else {
      do {
        num += input.charAt(i);
        i++;
      } while (i < input.length && input.charAt(i) !== '+');
      array.push(num);
      num = "";
      i--;
    }
  }
  return array;
}

console.log(convertArray("10+2+3000+70+1"));

const q = prompt('Sum?');
alert('Answer: ' + eval(q));

不推荐使用 eval,但如果您只需要一个快速而肮脏的技巧,它就可以工作。 就个人而言,我会推荐一个库,例如 Math.js,但任何一个都可以。

如果您真的需要自己为项目做这件事,我建议您在此处查看答案:Evaluating a string as a mathematical expression in JavaScript

希望你在你计划做的事情上取得成功。

你可以和一个小组分开。这也将组添加到数组中。

其他计算符号,您可以将它们添加到括号中。

const convertArray = string => string.split(/([+])/);

console.log(convertArray("10+2+3000+70+1"));

看来复杂程度一定与你想确定运营商有关。在您的代码中,您只需将它们全部推送到数组中。这样做就像

const re = /((\d+)|([^\d]+))/g
const convertArray = str => {
  let match, arr=[];
  while (match = re.exec(str)) {
    arr.push(match[1]) // here you can determine if you have an operator
    console.log(match[1],"Operator?",!/^\d+$/.test(match[1]))
  }
  return arr
}
const str = "10+2+3000+70+1";

console.log(convertArray(str));