[英]AngularJs cannot sort array even with javascript function
編輯:我修復了它
好吧,我修復了它,我不知道怎么做,什么,但是我所做的只是我移動了var personTaskMonthly = []的初始化; 從
$http.get().then(function(data){
var personTaskMonthly=[];})
到$ http這樣開始之前
var personTaskMonthly=[];
$http.get().then(function(data){})
謝謝大家幫助我解決這個問題。
編輯:我發現問題出在哪里,但我不知道該如何解決:一切似乎都很好,直到我執行$http.get().then(function(data){ /****** HERE I'm losing the correct order ****/});
它是一個復雜的代碼,其中有3個嵌套的angular foreach函數。 最后,我以某種方式獲得了預期的結果。 但是結果排序不正確,我也不知道為什么。
結果如下:
{dayId: 1, dayName: "Jeudi", personTaskMonthly: Array(2), $$hashKey: "object:79"}
{dayId: 3, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:82"}
{dayId: 2, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:85"}
{dayId: 5, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:88"}
{dayId: 6, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:91"}
{dayId: 4, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:94"}
{dayId: 10, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:97"}
{dayId: 7, dayName: "Mercredi", personTaskMonthly: Array(0), $$hashKey: "object:100"}
{dayId: 12, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:103"}
{dayId: 8, dayName: "Jeudi", personTaskMonthly: Array(0), $$hashKey: "object:106"}
{dayId: 11, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:109"}
{dayId: 9, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:112"}
{dayId: 18, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:115"}
{dayId: 13, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:118"}
{dayId: 15, dayName: "Jeudi", personTaskMonthly: Array(0), $$hashKey: "object:121"}
我的預期結果是:
{dayId: 1, dayName: "Jeudi", personTaskMonthly: Array(2), $$hashKey: "object:79"}
{dayId: 2, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:85"}
{dayId: 3, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:82"}
{dayId: 4, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:94"}
{dayId: 5, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:88"}
{dayId: 6, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:91"}
{dayId: 7, dayName: "Mercredi", personTaskMonthly: Array(0), $$hashKey: "object:100"}
{dayId: 8, dayName: "Jeudi", personTaskMonthly: Array(0), $$hashKey: "object:106"}
{dayId: 9, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:112"}
{dayId: 10, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:97"}
{dayId: 11, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:109"}
{dayId: 12, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:103"}
{dayId: 13, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:118"}
....
您能幫助我如何對這個json結果進行排序,以實現所需的東西?
這是我的angularjs代碼:
function getMonthlyTask(daysInterv){
/*
var sDateHour = $scope.dayInterval[0].dsUnix;
var eDateHour = $scope.dayInterval[$scope.dayInterval.length-1].deUnix; */
var taskPerDay=[];
var i=0;
var counter = [];
daysInterv.forEach(function(item, ind){
var sDateHour = item.dsUnix;
var eDateHour = item.deUnix;
var dayName = item.dayName;
var dId = item.id;
$http.get('link')
.then(function(data){
var datas = data.data;
var personTaskMonthly=[];
datas.forEach(function(it, ind){
var idProfile = it.id_profile;
var idGroupe = it.id_groupe;
if (it.tasks){
var countPT = {};
var count;
it.tasks.forEach(function(k,v){
if(k.comptable==1){
if(!countPT[k.id_profile]){
count=1;
countPT[k.id_profile]=count;
}else{
count+=1;
countPT[k.id_profile]=count;
}
}
})
personTaskMonthly.push({'id_profile':it.id_profile, 'groupe':it.groupe,countPT});
}
})
taskPerDay.push({'dayId':dId,'dayName':dayName,personTaskMonthly});
//$scope.personTaskMonthly=personTaskMonthly;
});//ending then
})
console.log(taskPerDay);
var sorted = taskPerDay.sort(function(a,b){return a-b});
$scope.taskPerDay = sorted;
console.log(sorted);
}
您的排序函數正在使用整個對象進行比較,例如taskPerDay.sort(function(a,b){ return a.dayId - b.dayId; })
但是,或者,如果您不需要javascript中的排序數組,則可以使用有角度的2/4/5管道在HTML代碼本身中對它們進行排序,還有很多第三方管道可用,例如ngx-order-pipe 。 如果您使用的是Angular 1.x,則可以使用默認的orderBy過濾器為您完成此操作
在您的sort()中缺少屬性dayId,請嘗試以下操作
taskPerDay.sort(function(a,b){ return a.dayId - b.dayId; })
你可以試試看
var items = [{dayId: 1, dayName: "Jeudi", personTaskMonthly: Array(2), $$hashKey: "object:79"},
{dayId: 3, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:82"},
{dayId: 2, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:85"},
{dayId: 5, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:88"},
{dayId: 6, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:91"},
{dayId: 4, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:94"},
{dayId: 10, dayName: "Samedi", personTaskMonthly: Array(0), $$hashKey: "object:97"},
{dayId: 7, dayName: "Mercredi", personTaskMonthly: Array(0), $$hashKey: "object:100"},
{dayId: 12, dayName: "Lundi", personTaskMonthly: Array(0), $$hashKey: "object:103"},
{dayId: 8, dayName: "Jeudi", personTaskMonthly: Array(0), $$hashKey: "object:106"},
{dayId: 11, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:109"},
{dayId: 9, dayName: "Vendredi", personTaskMonthly: Array(0), $$hashKey: "object:112"},
{dayId: 18, dayName: "Dimanche", personTaskMonthly: Array(0), $$hashKey: "object:115"},
{dayId: 13, dayName: "Mardi", personTaskMonthly: Array(0), $$hashKey: "object:118"},
{dayId: 15, dayName: "Jeudi", personTaskMonthly: Array(0), $$hashKey: "object:121"}]
var sortedArray = items.sort(function(a,b){
return a.dayId >b.dayId?1:a.dayId <b.dayId?-1:0
})
console.log(sortedArray);
更新和工作在這里
編輯:我修復了它
好吧,我修復了它,我不知道怎么做,什么,但是我所做的只是我移動了var personTaskMonthly = []的初始化; 從
$http.get().then(function(data){
var personTaskMonthly=[];})
到$ http這樣開始之前
var personTaskMonthly=[];
$http.get().then(function(data){})
謝謝大家幫助我解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.