簡體   English   中英

即使使用javascript函數,AngularJ也無法對數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM