如何在Javascript中动态返回多个函数

如何在Javascript中动态返回多个函数,javascript,angularjs,Javascript,Angularjs,如果我没有以正确的方式提问,我道歉。让我解释一下我的问题 我正在处理一个表中的搜索函数,我正在添加在特定列中搜索的选项 现在我正在手动检查复选框是否选中,然后返回正确的搜索功能 然而,我想动态地创建它,我不想在每次向表中添加新列后编辑此代码。这就是我挣扎的地方 这是我当前的代码: vm.$watch('searchTerm', function (searchTerm) { if (!searchTerm) { vm.fil

如果我没有以正确的方式提问,我道歉。让我解释一下我的问题

我正在处理一个表中的搜索函数,我正在添加在特定列中搜索的选项

现在我正在手动检查复选框是否选中,然后返回正确的搜索功能

然而,我想动态地创建它,我不想在每次向表中添加新列后编辑此代码。这就是我挣扎的地方

这是我当前的代码:

        vm.$watch('searchTerm', function (searchTerm) {
            if (!searchTerm) {
                vm.filteredTable = angular.copy(vm.table);
            } else {
                searchTerm = searchTerm.toLowerCase();
                return vm.filteredTable.rows = vm.table.rows.filter(function (row) {
                    if (vm.searchFilter[0] === true ){
                        return (contains(row[vm.table.columns[0].value], searchTerm))
                    }
                    if (vm.searchFilter[1] === true ){
                        return (contains(row[vm.table.columns[1].value], searchTerm))
                    }
                    if (vm.searchFilter[2] === true ){
                        return (contains(row[vm.table.columns[2].value], searchTerm))
                    }
                    if (vm.searchFilter[3] === true ){
                        return (contains(row[vm.table.columns[3].value], searchTerm))
                    }
                    if (vm.searchFilter[4] === true ){
                        return (contains(row[vm.table.columns[4].value], searchTerm))
                    }
                    if (vm.searchFilter[5] === true ){
                        return (contains(row[vm.table.columns[5].value], searchTerm))
                    }
                    if (vm.searchFilter[6] === true ){
                        return (contains(row[vm.table.columns[6].value], searchTerm))
                    }
                    if (vm.searchFilter[7] === true ){
                        return (contains(row[vm.table.columns[7].value], searchTerm))
                    }
                });
            }
        });
这是我创建它的方式,我尝试使用循环,但是如果有循环,我不能返回函数。在for循环之前添加return也不会有帮助

        vm.$watch('searchTerm', function (searchTerm) {
            if (!searchTerm) {
                vm.filteredTable = angular.copy(vm.table);
            } else {
                searchTerm = searchTerm.toLowerCase();
                return vm.filteredTable.rows = vm.table.rows.filter(function (row) {
                    for (let i=0; i<vm.searchFilter.length; i++){
                        if (vm.searchFilter[i] === true ){
                            return (contains(row[vm.table.columns[i].value], searchTerm))
                        }
                    }
                });
            }
        });
第二次编辑: 在一位好心的会员告诉我后,我才意识到,第一个版本并没有按照我想要的方式工作


有多个选择的选项,因此如果我选择前两个复选框,那么它应该在两个复选框中搜索,而不是只搜索一个。

您可以像这样迭代整个过程:

vm.$watch('searchTerm',函数(searchTerm){
如果(!searchTerm){
vm.filteredTable=angular.copy(vm.table);
}否则{
searchTerm=searchTerm.toLowerCase();
返回vm.filteredTable.rows=vm.table.rows.filter(row=>
some((filter,index)=>filter&&contains(行[vm.table.columns[index].value]))
}

通过使用
Array.prototype.some
可以询问行是否与至少一个筛选器匹配。

“但是如果存在循环,我无法返回函数”-什么函数?函数“包含(a,b)”第一个版本只测试第一个复选框。第二个版本就是这样做的。那么问题出在哪里呢?谢谢,我现在才注意到…所以第一个版本也不起作用。@Andreas也许我上次的编辑会解释更多我的目标是什么谢谢你的回答,但是我正在尝试启用以下功能:用户选择一个或多个选项。然后搜索函数应搜索搜索条件是否包含在第1列或第2列中,它的
const contains=(value,searchterm)=>{…}
您可以将其作为约束之一添加到过滤器的谓词中,但这是您需要的常规模式。如果需要,您可以在codesandbox.io中创建一个示例,我将很高兴地向您展示它如何与此解决方案配合使用。“然而,这是您需要的常规模式”-由于对
contains()
的调用不完整,因此仍然无法工作。
        const contains = (value, searchTerm) => {
            if (!value) return false;
            return value.toLowerCase().includes(searchTerm);
        }