我有一个数组,在页面加载时按照我想要的方式对数组进行排序,具体取决于显示具有未来日期的对象的当前日期,然后显示具有过去日期的对象,我们可以调用此datesToPlay。
我有两个单选按钮来调用方法来对同一个数组进行排序,并且在页面加载时,它对数组的排序非常好,我上面提到过。问题是当我使用其他排序方法对数组进行排序时,createdAt只是按创建日期对数组进行排序。这种方法排序很好,但当我按其他收音机按dateToPlay排序时,它不会对数组进行排序。
function SortByPlayTime(a, b){
var currentDate = new Date();
if(lastDateOfObjectsInArray > currentDate){
if(a.attributes.start >= currentDate){
if(a.attributes.start > b.attributes.start && b.attributes.start >= currentDate)
return 1;
else
return -1;
} else if(b.attributes.start >= currentDate){
if(b.attributes.start > a.attributes.start)
return -1;
else
return 1;
}
else{
if(a.attributes.start > b.attributes.start)
return 1;
else
return -1;
}
} else{
if(a.attributes.start > b.attributes.start)
return -1;
else
return 1;
}
function SortByCreation(a, b){
if(a.attributes.createdAt > b.attributes.createdAt)
return 1;
else
return -1;
基本上我正在做的是我有一个数组,我想要排序所有对象,这个数组大小不一,可以像1000个或更多的对象。
在函数loadArrayToShowFilters()中,我正在做的是准备一个将在表中显示的新数组(参见上面的屏幕注释)。这是因为我模仿一个表,但实际上我正在使用数组进行所有工作;这个数组总是100长度或更短。
function loadArrayToShowFilters() {
//array = the array of objects Im trying to filter
var sizeArrayToShow;
if(array.length < 100)
sizeArrayToShow = array.length;
else
sizeArrayToShow = 100;
arrayTableToShow = [];
//arrayTableToShow = This is the array that holds the objects that are shown on the table
for (var i = 0; i < sizeArrayToShow; i++) {
arrayTableToShow[i] = array[i];
};
触发排序的事件:事件点击两个单选按钮。
执行实际排序的代码:在每个单选按钮的事件点击上,我只是分别执行array.sort(SortByCreation)等。
示例数据:{&#34; start&#34;:{&#34; __ type&#34;:&#34; Date&#34;,&#34; iso&#34;:&#34; 2018- 02-01T11:00:00.000Z&#34;}&#34;端&#34; {&#34; __类型&#34;:&#34;日期&#34;&#34; ISO&#34 ;: &#34; 2018-02-01T12:00:00.000Z&#34;}&#34; createdAt&#34;:&#34; 2018-01-29T20:37:51.477Z&#34;&#34; updatedAt&#34;:&#34; 2018-02-23T03:12:15.968Z&#34;&#34;的ObjectID&#34;:&#34; dSVZXFAIyf&#34;}
它基本上只是一个带有对象的数组,每个对象都有一个变量属性,包含变量start和createdAt,用于进行排序
活动:
'click #lastCreated'(event){
orderArregloCreatedAt();
},
'click #nextToPlay'(event){
orderArregloPlayTime();
}
function orderArregloCreatedAt() {
array.sort(SortByCreation);
loadArrayToShowFilters();
}
function orderArregloPlayTime() {
array.sort(SortByPlayTime);
loadArrayToShowFilters();
}