删除冗余排序代码

时间:2014-11-20 10:29:57

标签: sorting knockout.js

我按照以下方式对数据进行排序。我正在使用knockout observable

self.myObsArray1 = ko.observableArray();
self.myObsArray2 = ko.observableArray();
var sortData = false;

self.myObsArray1 .sort(function (a, b) {

                        if (sortData ) {
                            return (a.Name() < b.Name() ? -1 : (a.Name() > b.Name() ? 1 : 0));
                        }
                        else {
                            return (b.Name() < a.Name() ? -1 : (b.Name() > a.Name() ? 1 : 0));
                        }
 });

我的页面中的代码类型与上面的代码类似,但上面的列名不同,我使用Name列进行排序。

然后我有上面相同类型的代码

self.myObsArray2 .sort(function (a, b) {

                        if (sortData ) {
                            return (a.Id() < b.Id() ? -1 : (a.Id() > b.Id() ? 1 : 0));
                        }
                        else {
                            return (b.Id() < a.Id() ? -1 : (b.Id() > a.Id() ? 1 : 0));
                        }
 });

我们可以以某种方式删除这个冗余代码吗?

1 个答案:

答案 0 :(得分:3)

您可以使用辅助函数来创建分拣机,从而使代码DRYer:

function createColumnSorter(column) {
    return function(a, b) {
        var valA = a[column]();
        var valB = b[column]();

        if (sortData) {
            return (valA < valB ? -1 : (valA > valB ? 1 : 0));
        } else {
            return (valB < valA ? -1 : (valB > valA ? 1 : 0));
        }
    };
}

用法:

self.myObsArray1.sort(createColumnSorter('Name'));
self.myObsArray2.sort(createColumnSorter('Id'));