我的代码生成一个字符串,如图所示。在每一行的末尾显示了一个欧元数字,将其称为euros1和euros2。想法是图标的数量乘以每行显示的euros1和euros2。因此,在我的示例中:第一行的(10,45 + 5,50)x 2 = 31,90,第二行的(18,24 + 9,60)x 3 = 83,52。这些数字总共应该是115,42。
但是,我当前的代码总共产生218,95。因此,它将欧元1和欧元2的总和乘以✓图标的总数。
我如何计算每行1欧元+ 2欧元x数量✓图标的总和?
我认为for循环可以帮助我,但是我是Java语言的新手,我不确定该如何进行。
var temp = g_form.getValue('mwadm_onkosten_list_refList_changes');
var count = (temp.match(/✓/g) || []).length;
var lastChar = temp[temp.length -1];
if (count != temp);
{
total = total * count;
}
答案 0 :(得分:1)
我在想一个分开的解决方案,就像@dganenco提到的那样。我创建了一个TEMP变量来重现您的结果字符串。并在每个行上执行一个函数。
我故意保持它非常简单。希望这可以帮助。
var temp = ["✓|| €10,45 | €1,50 ", "✓|| €10,45 | €2,50 ", "✓|| €10,45 | €3,50 "];
var totalTimes = (String(temp).match(/✓/g) || []).length;
//perform function for each row
temp.forEach(CalculateRow);
//Splits the row, Gets euro1 as decimal, euro2 as decimal, calculates the amount a character is found, calculates total, prints it to console.
function CalculateRow(item, index) {
var arr = item.split('|');
var euro1 = GetValueFromArray(arr,1);
var euro2 = GetValueFromArray(arr, 2);
var times = (String(arr).match(/✓/g) || []).length;
var _total = (euro1 + euro2) * times;
console.log(_total);
}
//Takes the index value, and casts it to decimal value
function GetValueFromArray(arr, index){
var getindex = arr.length -index;
var result = arr[getindex];
result = result.replace('€', '');
return parseFloat(result, 10);
}
答案 1 :(得分:0)
如果有可能仅用|
符号分割字符串,然后获取最后2个值并使用它们做所有需要的事情,我为您提供了一个解决方案。
const strArr = ['asd|addf|$56.60|$10.40', 'asd|addf|$5.60|$1.40'];
let sum = 0;
strArr.forEach(str => {
const splitted = str.split('|');
debugger;
const x = getNumber(splitted[splitted.length - 2]);
const y = getNumber(splitted[splitted.length - 1]);
sum += (x+y)*2;
});
function getNumber(str){
return +str.substring(1);
}
console.log(sum)
答案 2 :(得分:0)
假设temp
是采用
形式的多行字符串
asd|√|√| €12.34 | €15.25
zxc|√|| €18.34 | €19.25
此代码应为您提供最后两个数字的总和乘以√
var temp = "asd|√|√| €12.34 | €15.25\nzxc|√|| €18.34 | €19.25"
let lines = temp.split('\n')
let linesSummaries = []
for(let line of lines){
var count = line.match(/√/g).length
var vars = line.split('|')
var x = parseFloat(vars[vars.length-1].match(/\d+\.?\d*/))
var y = parseFloat(vars[vars.length-2].match(/\d+\.?\d*/))
var lineSum = (x + y ) * count
linesSummaries.push(lineSum)
}
console.log(linesSummaries)