2016-11-10 3 views
0

У меня есть два массива, один с налоговыми кодами (emptaxdeductcode) и один с суммой, уплаченной за эти налоговые коды (emptaxamt).Поиск итогов определенных строк в массиве

Я пытаюсь найти суммы, уплаченные за , только налоговые коды, заканчивающиеся на 31. Эти налоговые коды имеют различное количество символов, но мне нужны только 12 символов.

Попытка использовать простой цикл, но это, кажется, ломая на линии 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; 

Я пытался следующее, как тест, и оно возвращается: (Этот налоговый код не всегда находится в [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 с аналогичными проблемами для меня были решены с помощью «прототипов» функций или AngularJS и тому подобного. К сожалению, это не сработает для меня.

+1

Как он ломается по линии 3? – epascarello

+1

попробуйте записать значение emptaxdeductcode [q] перед его обработкой и посмотреть, что было до ошибки. Код emptaxdeductcode может содержать любое значение NULL? – alebianco

+1

Вы можете показать, как выглядят ваши данные? –

ответ

0

Я думаю, что ваш главный вопрос заключается в том, что вы только чтение 1 символ из строки, используя подстроку, а не 2.

Я думаю, что вы хотите

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

+0

Спасибо Крису. К сожалению, я пошел и попробовал это - без буено. Даже изменение его на подстроку (10) не работает. –

+0

Очень странно. Он отлично работает в jsFiddle. Попробуйте записать результат этого на консоль в своем приложении. console.log (emptaxdeductcode [q] .substring (10,12)); Сообщите нам, что вы получаете. –

0

Когда вы

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

вы увидите, что вы получите обратно 3, не 31.Так что вам нужно, чтобы поднять его до 12.

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

лично я бы либо использовать

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

или

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

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