繁体   English   中英

如何根据 javascript 中的用户输入向数组动态添加过滤器

[英]How to dynamically add filters to an array based on user input in javascript

我希望有可以将动态过滤器添加到数组的代码,然后数组通过 a.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添加到检查数组中。
我遇到的问题是,当创建箭头函数以推入检查数组时,变量现在不计算,因为它是箭头 function。 前任:

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 值?

你的代码对我有用。 请解释这对您不起作用。

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 做了一个;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM