как проверить есть ли в массиве определённое количество значений?
забираю значение input Checked с нескольких form в масив с сайта и после нужно узнать есть ли в этом массиве определённое количество значений
и нужно сделать сравнение вот такое
Логика теста
1.Если хотя бы 2 значение 1, тогда что то. Если нет 2 значение 1, переходим к след. условию 2.Если хотя бы 2 значение 3, тогда что то, Если нет 2 значение 3, переходим к след. условию 3.Если хотя бы 2 значение 2, тогда что то, Если нет 2 значение 2, переходим к след. условию 4.Если хотя бы 2 значение 4, тогда что то, Если нет 2 значение 4, переходим к след. условию 5.Если хотя бы 2 значение 5, тогда что то, Если нет 2 значение 5, тогда что то
инпуты собираю вот так:
function getCheckedCheckBoxes() {
var checkboxes = document.getElementsByClassName("checkbox");
let checkboxesChecked = []; // можно в массиве их хранить, если нужно использовать
for (var index = 0; index < checkboxes.length; index++) {
if (checkboxes[index].checked) {
checkboxesChecked.push(checkboxes[index].value);
// положим в массив выбранный
// alert(checkboxes[index].value); // делайте что нужно - это для наглядности
checkboxesChecked.forEach(function (entry) {
console.log(entry);
});
}
checkboxesChecked.pop();
}
return checkboxesChecked; // для использования в нужном месте
}
Ответы (1 шт):
Можно получить массив всех значений из "чекнутых" чекбоксов, затем получить массив уникальных значений (это не обязательно), пройтись по нему и найти первый же элемент, число который в основном массиве 2 и более. Если такой элемент есть, то выводим соответствующее сообщение, если нет, то другое.
Можно предварительно отсортировать массив значений по какой-то логике, например, если у вас от 1 до 5, то просто добавьте .sort() в конце.
Если надо что-то вывести для каждого случая, где 2 и более, то не find(), а filter().forEach() использовать.
document.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
checkbox.addEventListener('change', analyze_data);
})
analyze_data();
function analyze_data(){
const value_arr = [...document.querySelectorAll('input[type="checkbox"]:checked')].map(checkbox => checkbox.value);
const unique_values = [...new Set(value_arr)];
const len_2 = unique_values.find(val => value_arr.filter(v => v === val).length >= 2);
console.clear();
if(len_2){
console.log(`Значений "${len_2}" хотя бы 2`);
} else {
console.log(`Нет ни одного значения хотя бы 2`);
}
}
<input type="checkbox" value="1" checked><label>1</label>
<input type="checkbox" value="1"><label>1</label>
<input type="checkbox" value="3" checked><label>3</label>
<input type="checkbox" value="3" checked><label>3</label>
<input type="checkbox" value="4" checked><label>4</label>
<input type="checkbox" value="5"><label>5</label>
<input type="checkbox" value="2" checked><label>2</label>
<input type="checkbox" value="2" checked><label>2</label>