Объединение статических и динамических значений в условие фильтра - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужно объединить несколько условий фильтра, статических и динамических (динамические с неизвестным количеством, могут варьироваться от 1 до 10 или даже больше).Как это может быть сделано?Я всегда получаю неправильные результаты, и у меня возникает ощущение, что цикл for работает только с одним динамическим условием за раз.Спасибо за любую идею!

const Count = 3;
 
for (let i = 0; i < Count; i++) {
  $("#static").val == "10" && $(".sample:eq(" + i + ")").val() == "1");
}

должно привести к:

$("#static").val() == "10" && 
$(".sample:eq(0)").val() == "1") && 
$(".sample:eq(1)").val() == "1") && 
$(".sample:eq(2)").val() == "1")

1 Ответ

0 голосов
/ 27 февраля 2019

Если вы хотите выполнить свои условия, где:

  1. Элемент #static имеет значение '10' и
  2. Первые три элемента .sample имеют всезначение '1',

... вы можете использовать следующее условие:

// Get first 3 `.sample` elements, and see if their values are '1'
const $matchingSamples = $('.sample').filter(function(i) {
    return i <= 2 && this.value === '1';
});

// Combine all your conditions
const condition = $('#static').val() === '10' && $matchingSamples.length === 3;

Переменная condition будет эквивалентна:

$('#static').val() === '10' &&
  $('.sample:eq(0)').val() === '1') && 
  $('.sample:eq(1)').val() === '1') && 
  $('.sample:eq(2)').val() === '1')

Конечно, вы можете переписать приведенную выше логику, чтобы вообще не использовать jQuery, в ES6:

const samples = document.querySelectorAll('.sample');
const matchingSamples = Array.from(samples).filter((sample, i) => {
    return i <= 2 && sample.value === '1';
})

const condition = document.getElementById('static').value === '10' && matchingSamples.length === 3;

См. Подтверждение концепции ниже:

const numberOfSamplesToCheck = 3;

function checkValues() {
  const $matchingSamples = $('.sample').filter(function(i) {
    return i <= numberOfSamplesToCheck - 1 && this.value === '1';
  });
  
  const condition = $('#static').val() === '10' && $matchingSamples.length === numberOfSamplesToCheck;
  console.log(condition);
}

checkValues();

$(':input').on('change', checkValues);
input {
  border: 1px solid #000;
  width: 75px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="static" value="10" type="number" />
<input class="sample" value="1" type="number" />
<input class="sample" value="1" type="number" />
<input class="sample" value="1" type="number" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...