Показать сообщение отдельно
  #1 (permalink)  
Старый 22.12.2022, 20:07
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

Подсчитать в таблице строки с пустым input'ом в определённой колонке
Имеется такая таблица:
<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, а как-то иначе? Подскажите, пожалуйста.
Ответить с цитированием