我按照以下方式对数据进行排序。我正在使用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));
}
});
我们可以以某种方式删除这个冗余代码吗?
答案 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'));