多列上的 Knockoutjs ObservableArray ArrayFilter

Knockoutjs ObservableArray ArrayFilter on multiple columns

我正在尝试通过多个列过滤 ObservableArray。

我的问题与此类似question,但我的模型不同,因为可观察数组中的每个条目都是可观察对象。

var Employee = function(name, job, state, phone)
{
    this.name = ko.observable(name);
    this.job = ko.observable(job);
    this.state = ko.observable(state);
    this.phone = ko.observable(phone);
};

self.employees = ko.observableArray([
    new Employee("Sarah","Manager","","123456"),
    new Employee("Michelle","Receptionist","California",""),
    new Employee("James","","Florida","1213123"),
    new Employee("Steve","","Team Lead",""),
    new Employee("Britney","","Developer","")
]);

我的数组显示为 table 并且将具有一个功能供用户过滤每列的空值。

我正在处理要过滤的动态列列表(也取自 observablearray)

self.rowheader = ko.observableArray(["Name","Job","State","Phone" ]);

我似乎无法弄清楚如何映射这些值并将它们评估为使用 ko.utils.arrayFilter

的条件

这是 JSFiddle 我现在所在的位置。 感谢您的帮助

我已经设法找到了解决方案,但我仍然希望有人可以为此提出更优雅的解决方案。

我必须根据 selectedColumns 内容动态构建 arrayFilter 函数的 return 条件。 filteredArray observable 现在看起来像这样:

self.filteredemployees = ko.computed(function() {
    if(self.selectedColumns().length) {
        return ko.utils.arrayFilter(self.employees(), function(emp) {
            var filter = ko.utils.arrayMap(self.selectedColumns(), function(item) {
                            return 'emp.' + item.toLowerCase() + '() === ""';
                        }).join(' && ');

            return eval(filter)
        });
    } else {
        return self.employees();
    }
}, self);

我别无选择,只能在那里进行评估。