【发布时间】: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 =>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