【问题标题】:How to dynamically add filters to an array based on user input in javascript如何根据javascript中的用户输入动态地将过滤器添加到数组中
【发布时间】:2022-01-19 23:14:36
【问题描述】:

我希望有可以将动态过滤器添加到数组的代码,然后数组通过 .filter 运行,然后检查所有过滤器是否为真:

var checks = [item =>item.indexOf("e") == -1, item =>item.indexOf("r") == 0];   
var words = ["roast", "wings", "chive", "pests", "rhyme"]
var filteredArr = words.filter(item => checks.every(f => f(item)));

我希望它接受两个输入,如“r”和它应该在 (0) 中的列,并将 item =>item.indexOf("r") == 0 添加到检查数组中。
我遇到的问题是,当创建箭头函数以推入检查数组时,变量现在不计算,因为它是一个箭头函数。例如:

var value = "r"
item =>item.indexOf(value) == -1

不起作用,因为它将保持为值而不是变量的值。

var value = "r"
var checks = [item =>item.indexOf(value) == -1];
var words = ["roast", "wings", "chive", "pests", "rhyme"]
var filteredArr = words.filter(item => checks.every(f => f(item)));

console.log(filteredArr);

我查看了许多其他问题,但他们永远无法像我描述的那样添加过滤器。我想知道是否有解决此问题的方法或以其他方式将检查动态添加到数组。

编辑:

var words = ["roast", "wings", "chive", "pests", "rhyme"];
var checks = [];
for(let i = 0; i < 30; i++){
    var value = "r"
    var column = i%5;
    checks.push(item =>item.indexOf(value) == column);
}
var filteredArr = words.filter(item => checks.every(f => f(item)));
console.log(filteredArr);

我推送的过滤器是否可以包含 i%5 值?

【问题讨论】:

  • item =&gt;item.indexOf(value) == -1 应该可以正常工作。您的意思是为您的words 数组使用字符串文字,还是这些都是自变量? (如果是,请编辑以显示它们包含的内容)
  • 如您所见,代码有效。
  • @CertainPerformance 而不是添加 item =>item.indexOf(value) == -1 我希望它添加 item =>item.indexOf("r") == -1。我希望它根据变量值添加检查。因此,如果变量值为“n”,它将创建一个检查: item =>item.indexOf("n") == -1
  • 那行得通。如果你有value = "n",那就是它将执行的检查。
  • @CertainPerformance 是的,但我希望它在检查中没有变量值,以便如果值变量更改以进行新检查,其他检查仍然有效

标签: javascript filter dynamic-arrays


【解决方案1】:

您的代码对我有用。请说明这对您不起作用。

var value = "e";

var checks = [item =>item.indexOf(value) == -1, item =>item.indexOf("r") == 0];   
var words = ["roast", "wings", "chive", "pests", "rhyme"]

// prints roast
console.log("answer:"+words.filter(item => checks.every(f => f(item))));

value = "o";

// prints rhyme
console.log("answer:"+words.filter(item => checks.every(f => f(item))));

顺便说一句,你在做一个 wordle 求解器吗?因为我今天早上用 Python 做了一个 ;)

【讨论】:

  • yes lmao :D 但是如果这段代码在 for 循环或其他东西中,并且值变量并不总是保持不变,它就不会工作,有没有办法添加检查没有变量名,只有值?
  • @Philyshark7 在 JS 闭包中捕获变量很复杂。尝试切换你的 for 循环以使用 let 而不是 var。见:stackoverflow.com/a/750506/312407
  • 顺便说一句,发布一个完整的工作程序来重现您的问题是很重要的。如果您原来的有问题的代码有一个 for 循环,那么您的 Question 应该包含相同的 for 循环等。
  • 谢谢,添加了一个 for 循环示例。我的问题是是否可以添加没有变量名和变量值的检查,而我得到的答案是它已经在工作,这不是我问的。 for 循环是一个示例,说明为什么在名称中包含值会是一个问题。
  • 如果将变量声明为var valuelet value,这很重要。你两个都没用——我不确定那是做什么的。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
相关资源
最近更新 更多