如何使用_.SortBy()与对象数组?

时间:2017-07-06 09:03:36

标签: javascript angularjs arrays

我尝试了很多算法来将我的Array与内部对象转换为数组数组。但每次它不起作用或我的新创建数组是空的。例如,我无法使用angular.foreach()myArray.forEach(function(element))遇到此问题。我真的不知道为什么,因为它被声明并初始化为array "var myArray = [];"

然后我使用push来填充它,我在console.log中获得的是: enter image description here

我想要的是_.SortBy(myArray, 'date');(Underscore.js)可以使用的内容,我需要myArray这样的内容:

var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];

关注这篇文章:Converting a JS object to an array我几乎没有列出所有列出的内容,但没有任何效果......你能帮我一把吗?

$scope.myArray = []; 
 
// This is into an angular.foreach
 
 $scope.myArray.push({'Name' : snapshot.val().name, 'Link' : snapshot.val().link, 'second' : snapshot.val().second, 'var' : snapshot.val().var, 'selfID' : 'MyID', 'date' : snapshot.val().date, 'hour' : snapshot.val().hour });
 
 console.log("MyArray :", $scope.myArray);

编辑:

我的数组似乎有问题,我尝试了这两个函数,但我看不到任何console.log() ...我的数组是否可能被锁定?也许没有函数(sort,_.sortBy ......)会遇到它?

// One try to run into and sort
$scope.myArray.sort(function(x, y)
{
            var date1 = new Date(x.date);
            var date2 = new Date(y.date);
            
            console.log("My dates :", date1);
            console.log("My dates :", date2);
            
            return date1 - date2 ;
});
        
// An other try to run into my array
for(var i = 0; i < $scope.myArray.length; i++)
{
            console.log("I'm in "+i+" with : "+$scope.newCal[i]);
}

// Even is showing the complete Array in console.log is working, this below shows me "undefined"

 console.log("One element : "+$scope.newCal[1]);

4 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,您应该只需按_.sortBy(myArray, 'date')按日期对数组进行排序。

如果其他所有方法都失败了,您可以随时尝试myArray.sort((a, b) => a.date < b.date)

答案 1 :(得分:0)

在数组中,您使用了date个关键字,在此函数_.SortBy(myArray, 'Date');中,您使用Date关键字进行排序。

'Date'关键字替换为'date',然后尝试对数组进行排序。

所以你的排序函数将是_.sortBy(myArray, 'date')

答案 2 :(得分:0)

您可以使用_.SortBy(myArray,'date'),但由于您的“date”属性似乎是字符串文字,因此将按字母顺序排序。你需要做这样的事情

function parseYourDateToRealDateObjectSomehow(dateString){  return new Date(); }

_.SortBy(myArray, function(item1,item2){  
  var bigger = parseYourDateToRealDateObjectSomehow(item1.date)  > parseYourDateToRealDateObjectSomehow(item2.date);
   if(bigger) return 1;

var smaller = parseYourDateToRealDateObjectSomehow(item1.date) < 
   parseYourDateToRealDateObjectSomehow(item2.date);
   if(smaller) return -1;

   return 0;


});

答案 3 :(得分:0)

问题解决了!所以“sort()”方法不是原因。问题在于firebase和我的Array之间的异步通信,当我将sort()方法放入我的firebase请求(我用来填充数组)时,排序成功。

谢谢大家的支持! ;)