【问题标题】:AngularJs cannot sort array even with javascript function即使使用 javascript 函数,AngularJs 也无法对数组进行排序
【发布时间】:2018-02-26 03:21:37
【问题描述】:

编辑:我已修复

好吧,我修复了它,我不知道如何修复它,但我所做的只是移动了 var personTaskMonthly=[]; 的 init来自

$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 个嵌套的角度 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);


  }

【问题讨论】:

  • 好的。但是排序的代码在哪里?
  • 通常我应该已经把这个排序了,但是发生了一些事情,排序正在改变顺序。
  • 看看这个链接...刷新它,你会看到变化thedev.koalito.com/newPlanning2/fullView.php
  • 我没有看到您在您发布的链接中描述的症状。

标签: javascript arrays angularjs angularjs-orderby


【解决方案1】:

您的排序功能正在使用整个对象来比较您需要像这样使用 taskPerDay.sort(function(a,b){ return a.dayId - b.dayId; })

但是,如果您不需要 javascript 中的排序数组,您也可以使用 2/4/5 角管道在 HTML 代码中对它们进行排序,有很多第三方管道可用,例如 ngx-order-pipe。如果您使用的是 Angular 1.x,则可以使用默认的 orderBy filter 为您执行此操作

【讨论】:

  • 你好。感谢您的帮助,我也尝试过,但似乎无法解决问题。我总是得到相同的结果。
【解决方案2】:

在您的 sort() 中缺少属性 dayId,试试这个

taskPerDay.sort(function(a,b){ return a.dayId - b.dayId; })

【讨论】:

  • 我试过了,这根本行不通。我什至不知道为什么
  • 也许不是数组,而是对象?
【解决方案3】:

你可以试试这个。

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);

更新和工作小提琴here

【讨论】:

  • 你可以在排序函数中写这个..return a.dayId >b.dayId?1:-1
【解决方案4】:

编辑:我已修复

好吧,我修复了它,我不知道如何修复它,但我所做的只是移动了 var personTaskMonthly=[]; 的 init来自

$http.get().then(function(data){
var personTaskMonthly=[];})

在 $http 开始之前 像这样

var personTaskMonthly=[];
$http.get().then(function(data){})

感谢大家帮助我解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2022-11-02
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多