Javascript:将字符串转换为数组

问题描述

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

我的问题是,如何改进此代码?还有什么其他方法可以解决这个问题? (时间复杂度,整洁度,较短的代码......。无论如何)

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 convertArray = string => string.split(/([+])/);

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 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));