【问题标题】:Javascript: converting string to an arrayJavascript:将字符串转换为数组
【发布时间】:2020-12-23 15:06:20
【问题描述】:

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

我的问题是,如何改进这段代码?处理这个问题的其他方法是什么? (时间复杂度、简洁性、更短的代码......随便)

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

【问题讨论】:

  • 你有一些输入和输出吗?代码有效吗?
  • 不是为了有意义,更多的是关于主题。请访问help center,使用tour 了解内容和How to Ask。做一些研究,搜索关于SO的相关主题;如果您遇到困难,请发布您尝试的minimal reproducible example,并使用[&lt;&gt;] sn-p 编辑器记录输入和预期输出。
  • @NinaScholz 运行 sn-p

标签: javascript arrays string calculator


【解决方案1】:

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

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

如果您确实需要自己为某个项目执行此操作,我建议您在此处查看答案:Evaluating a string as a mathematical expression in JavaScript

希望你在计划做的任何事情上都能成功。

【讨论】:

    【解决方案2】:

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

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

    const convertArray = string => string.split(/([+])/);
    
    console.log(convertArray("10+2+3000+70+1"));

    【讨论】:

    • 啊。我花了几分钟和 exec 一起玩才做到这一点!
    • 至少我的能看出是不是算子
    【解决方案3】:

    似乎复杂性一定与您希望确定运算符有关。在您的代码中,您只需将它们全部推送到数组中。这样做就像

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

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2013-02-12
      • 2022-11-29
      相关资源
      最近更新 更多