【问题标题】:Combining static and dynamic values to a filter condition将静态和动态值组合到过滤条件
【发布时间】:2019-02-27 16:03:55
【问题描述】:

我需要结合一些过滤条件,静态和动态条件(数量未知的动态条件,可以从 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")

【问题讨论】:

  • 首先,问题中存在语法错误。其次,条件不是这样运作的。因此,这是一个 X/Y 问题,您在其中询问了您尝试的解决方案,而不是描述您要解决的问题是什么。如果您可以编辑问题,我们可以为您提供一些答案,因为即使有了这项工作,我也可以向您保证,有更好的方法来实现您的需求
  • @Rory McCrossan:我已经修复了语法错误,并且我期望的内容都写在示例中。啊,我看到 Tyler Roper 已经优化了这个问题。谢谢!
  • 请不要多次问同一个问题...编辑your older question
  • @SchweizerSchoggi 我可以看到写的内容,但由于我在第一条评论中描述的原因,这几乎没有意义。
  • @SchweizerSchoggi 我们可以为您提供帮助,但您需要解决 Rory 最初的评论。你的情况没有任何事情。您要解决的实际问题是什么?你的 HTML 是什么样的?

标签: jquery loops for-loop


【解决方案1】:

如果你想满足你的条件,其中:

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

当然,你可以重写上面的逻辑,在 ES6 中完全不使用 jQuery:

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" />

【讨论】:

  • 看起来很有希望!除了“#static”和“.sample”之外,我还有更多过滤器要设置。但我想我可以重复你解决问题的方式。非常感谢,我已经解决这个问题好几天了!
  • 这里.filter(function(i) { ... }是什么意思,i
  • @SchweizerSchoggi 在每次迭代中选择前 3 个元素,即 eq(0)eq(1)eq(2)
  • 嗯好的,以后可能会有所不同
  • @SchweizerSchoggi 当然。我将更新我的代码 sn-p,以便将要检查的元素数量存储为变量。
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多