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));
这是我的计算器项目的功能之一。首先我需要将输入的字符串转换成一个数组,然后再进行操作。 (假设输入现在只有数字和“+”号。
我的问题是,我该如何改进这段代码?还有什么其他方法可以解决这个问题? (时间复杂度、简洁性、更短的代码……随便)
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));