查找数组中某些字符串的总数

时间:2016-11-10 14:57:02

标签: javascript arrays for-loop subtotal

我有两个数组,一个包含税码(emptaxdeductcode),另一个包含为这些税码支付的金额(emptaxamt)。

我正在尝试查找为仅支付以31 结尾的税码的金额。这些税码有不同的字符数,但我需要的字符总是12个字符。

尝试使用一个简单的for循环,但它似乎在第3行突破。即使对于那些有相关税号的人,它总是显示0:

var returnedValue = 0;
for (var q = 0; q < emptaxdeductcode.length; q++) {
    if (emptaxdeductcode[q].substring(10,11) == "31") {
        returnedValue += emptaxamt[q];
    } else {
        0;
    }
}
returnedValue;

我尝试了以下测试,它返回true: (这个税法并不总是在[5]中,所以我不能只使用它。另外还有人有多个税码以31结尾)

if (emptaxdeductcode[5].substring(10,11) == "31") {
    "TRUE";
} else {
    "FALSE";
}

所以它必须是for循环中导致问题的子串。任何指导将不胜感激!

编辑:这是一个数据样本。如果这出口很奇怪而道歉 - 不完全确定如何制作表格:

emptaxdeductcode | emptaxamt

--- | ---

00-10 | 55.36

00-11 | 8.33

00-12 | 35.63

39-20 | 17.64

39-22 | 0.40

390770040-31 | 9.48

390770040-32 | 2.00

Edit2:我用来构建此报告的软件不支持许多JS实用程序/库。有关类似问题的stackoverflow上的很多帖子已经通过'prototype'函数或AngularJS等解决了。不幸的是,这对我不起作用。

2 个答案:

答案 0 :(得分:0)

我认为你的主要问题是你只使用子字符串而不是2来读取字符串中的1个字符。

我想你想要

emptaxdeductcode[q].substring(10,12)

代替。

这是一些示例代码和JSFiddle。

var emptaxdeductcode = ["123451234531", "123451234532"];
var emptaxamt = [10, 20];

var returnedValue = 0;
for (var q = 0; q < emptaxdeductcode.length; q++)
{
    if (emptaxdeductcode[q].substring(10,12) == "31") {
        returnedValue += emptaxamt[q];
    } else {
        0;
    }
}
alert(returnedValue);

JSFiddle Code

答案 1 :(得分:0)

当你这样做时

console.log(emptaxdeductcode[q].substring(10, 11));

你会看到你回来3,而不是31。所以你需要把它撞到12。

&#13;
&#13;
var emptaxdeductcode = ["00-10", "00-11", "00-12", "39-20", "39-22", "390770040-31", "390770040-32"],
  emptaxamt = [55.36, 8.33, 35.63, 17.64, 0.40, 9.48, 2.00];

var returnedValue = 0;
for (var q = 0; q < emptaxdeductcode.length; q++) {
  if (emptaxdeductcode[q].substring(10, 12) == "31") {
    returnedValue += emptaxamt[q]
  }
}

console.log(returnedValue);
&#13;
&#13;
&#13;

我个人会使用

var code = emptaxdeductcode[q].substr(-2);

var code = emptaxdeductcode[q].split("-").pop();

&#13;
&#13;
var emptaxdeductcode = ["00-10", "00-11", "00-12", "39-20", "39-22", "390770040-31", "390770040-32"],
  emptaxamt = [55.36, 8.33, 35.63, 17.64, 0.40, 9.48, 2.00];


var total = emptaxdeductcode.reduce( function(total, code, ind){
    if (code.split("-").pop() === "31") {
      total += emptaxamt[ind];  
    }
    return total;
}, 0);

console.log(total);
&#13;
&#13;
&#13;