我有一个嵌套数据的 javascript 数组,用于保存将显示给用户的数据。
用户希望能够将 0 到 n 个过滤条件应用于他们正在查看的数据。
为了实现这个目标,我需要首先找到符合 0 到 n 过滤条件的元素,然后对这些条目执行一些数据操作。解决这个问题的一个明显方法是有几个背靠背的过滤器语句(在它们内部进行条件检查以查看是否需要应用过滤器),然后在末尾有一个映射函数,如下所示:
var firstFilterList = _.filter(myData, firstFilterFunction);
var secondFilterList = _.filter(firstFilterList, secondFilterFunction);
var thirdFilterList = _.filter(secondFilterList, thirdFilterFunction);
var finalList = _.map(thirdFilterList, postFilterFunction);
然而,在这种情况下,javascript 数组将被遍历 4 次。解决这个问题的一种方法是让一个过滤器在确定是否存在匹配之前检查所有 3(或 0 到 n)条件,然后在函数末尾的过滤器内部进行数据操作,然而,这似乎有点老套,并且使“过滤器”负责不止一件事,这并不理想。好处是 javascript 数组只被遍历一次。
是否有一种“最佳实践”方式来完成我想要完成的事情?
编辑:我也很想知道在过滤器函数中执行数据操作(向 javascript 对象等添加字段等)是否被认为是不好的做法。
最佳答案
您可以将所有过滤器函数收集到一个数组中,并使用实际数据集检查每个过滤器,然后根据结果进行过滤。然后使用您的映射函数来获得想要的结果。
var data = [ /* ... */ ],
filterFn1 = () => Math.round(Math.random()),
filterFn2 = (age) => age > 35,
filterFn3 = year => year === 1955,
fns = [filterFn1, filterFn2, filterFn2],
whatever = ... // final function for mapping
result = data
.filter(x => fns.every(f => f(x)))
.map(whatever);
关于javascript - 仅遍历一次时将可变数量的过滤条件应用于 javascript 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58506297/