函数在javascript中对字符串进行两次拆分,并对总标记求和



我是javascript的新手,正在尝试编写一个函数来计算总分。我有一些输入文本需要清理/拆分。

示例:

a, 80newlineb, 50newline

在"换行符"上拆分后的第一个数组的输出应该是这样的:

["a, 80" , "b, 50"]

然后,我试图循环并创建一个额外的数组,该数组的格式可以用来计算总标记。类似这样的东西:

function getTotal(input_text)
{
const lines = input_text.split("newline");
var arrayLength = lines.length;
marks_array = [];
for(var i=0; i<arrayLength; i++){
lines[i].split(",");
split = {module:lines[0], mark:lines[1]};
module_marks.push(split);
}
some code
return total_marks;
}

我只真正使用过php,我认为我正在将两种语言合并为一种,并感到困惑。任何帮助都将不胜感激!

编辑在本例中,答案应为130。

在换行符上拆分后,过滤掉空结果,然后在逗号和空格上再次拆分。(不仅仅是逗号,因为你只想要右边的数字部分,而不是带前导空格的数字。(这会给你想要的第一个结果。然后,映射到每个项目中的第二个项目——数字部分——并将它们全部与.reduce相加。

const input = `a, 80newlineb, 50newline`;
const lines = input
.split('newline')
.filter(Boolean) // remove empty lines
.map(line => line.split(', '));
console.log(lines);
const sum = lines
.map(line => line[1])
.reduce((a, b) => a + Number(b), 0);
console.log(sum);

有很多方法可以实现这一点。如果您只需要用正则表达式计算数字上的总match,就可以得到一个数字数组,然后在该数组上迭代,将数字添加到一个新变量中。

注意:从字符串中提取的数字也将是字符串,因此必须将它们强制为数字。您可以在带有.map(Number)的数组上使用map来返回一个新的整数数组,在将数字添加到总数(+number(之前加上前缀,或者使用Number构造函数。本例使用前缀方法。

注2:我故意错过了您希望['a, 80' , 'b, 50']作为输出的部分,因为不清楚它是否只是您最终结果的垫脚石,或者您是否打算将其用于其他用途。如果是后者,您可能需要考虑使用对象来构建数据。

const str = 'a, 80nb, 50n';
const numbers = str.match(/d+/g);
let total = 0;
for (const number of numbers) {
total += +number;
}
console.log(total);

您可以使用正则表达式同时按n,拆分字符串
如果这些数字不是NaN或空字符串,则使用reduce将这些数字添加到总数中。

const inputText = "a, 80nb, 50n";
const getTotal = (text) =>
text.split(/[n|,]/).reduce((total, item) => {
return isNaN(item) || item === "" ? total : total + parseInt(item);
}, 0);
console.log(getTotal(inputText));

String.match()方法和Array.reduce()的帮助下使用RegEx可以简单地实现这一点

实时演示

const inputStr = 'a, 80newlineb, 50newline';
var extractMarks = inputStr.match(/(d+)/g);
const output = extractMarks.reduce((a, b) => Number(a) + Number(b));
console.log(output);

最新更新