Имеется такая таблица:
<table id="cTabZkp">
<thead>
<tr>
<th>X</th>
<th>N#</th>
<th>Product</th>
<th>Number</th>
</tr>
</thead>
<tbody>
<tr>
<td><button>X</button></td>
<td>1</td>
<td><input type="text" name="Prd" value="medium MCDB"></td>
<td><input type="text" name="Nkt" value="20483020"></td>
</tr>
<tr>
<td><button>X</button></td>
<td>2</td>
<td><input type="text" name="Prd" value="cell tracker"></td>
<td><input type="text" name="Nkt" value="D8026"></td>
</tr>
<tr>
<td><button>X</button></td>
<td>3</td>
<td><input type="text" name="Prd" value=""></td>
<td><input type="text" name="Nkt" value=""></td>
</tr>
<tr>
<td><button>X</button></td>
<td>4</td>
<td><input type="text" name="Prd" value=""></td>
<td><input type="text" name="Nkt" value=""></td>
</tr>
<tr>
<td><button>X</button></td>
<td>5</td>
<td><input type="text" name="Prd" value=""></td>
<td><input type="text" name="Nkt" value=""></td>
</tr>
</tbody>
</table>
Мне необходимо подсчитать количество строк, имеющих пустые input'ы с аргументом name="Prd" (в приведённом примере их 3).
Я пробовал привести коллекцию строк к массиву и применить reduce:
var myArray = [...$("#cTabZkp tbody tr input[name='Prd']")];
var myCallback = (total, currentValue, currentIndex, arr ) => {
var cV=arr[currentIndex].find("input[name='Prd']").val();
var iii=(!cV ? 1 : 0);
return total + iii;
};
var result = myArray.reduce(myCallback);
console.log('result = ',result);
Не получается и я догадываюсь, почему: элемент массива не является числом. Тогда я попытался привести всё к числам:
var myArray = [...$("#cTabZkp tbody tr input[name='Prd']").val()];
var myCallback = (total, currentValue, currentIndex, arr ) => {
var iii=(!currentValue ? 1 : 0);
return total + iii;
};
var result = myArray.reduce(myCallback);
console.log('result = ',result);
- так тоже не выходит, ибо значения НЕ-пустых input'ов тогда раскладываются на символы и "путаются под ногами".
Как бы победить такой подсчёт? Может, не через reduce, а как-то иначе? Подскажите, пожалуйста.