【发布时间】:2023-03-10 17:46:01
【问题描述】:
我有一个键值过滤器。
$scope.filter.subjects = [
{ Key: 27, Value: "Txt" }
{ Key: 19, Value: "Txt" }
{ Key: 7, Value: "Txt" }
{ Key: 5, Value: "Txt" }
]
还有一个结果集合,我想在其中过滤另一个键值集合。
result = [{
Prop1: "txt",
Prop2: "txt",
...
Subjects: [{
{ Key: 7, Value: "Txt" }
{ Key: 5, Value: "Txt" }
],
...
}]
这个 lodash 过滤目前正在工作,但它看起来非常低效且笨拙。我可以将后端的过滤器和结果模型更改为,而不是键和值的集合,我可以返回一个对象,其值映射如下:
...
Subjects: {
7: "Txt",
5: "txt"
}
...
并将过滤器更改为:
$scope.filter.subjects = {
27: "Txt",
19: "Txt",
7: "Txt",
5: "Txt"
}
如果这样可以提高效率
这是当前的过滤器:
...
var filteredList = angular.copy($scope.data);
...
if ($scope.filter.Subject.length > 0) {
filteredList = _.filter(filteredList, function (o) {
return _.find(o.Subjects, function (y) {
return _.find($scope.filter.Subject, ["Key", y.Key]);
});
});
}
...
$scope.result = filteredList;
【问题讨论】:
-
你能告诉我们相对于精确输入的精确输出是什么?看来您只是想从结果中过滤掉一些结果,而不是进一步调整内部。
-
是的,我在同一方法中有其他更简单的过滤器,它只使用 angular 的 $filter 方法过滤单个属性。因此,它正在构建一个过滤集合,其中结果包含在添加的任何过滤器中。
标签: javascript angularjs lodash