Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按属性值对JavaScript对象数组排序_Javascript_Arrays_Sorting_Lodash - Fatal编程技术网

按属性值对JavaScript对象数组排序

按属性值对JavaScript对象数组排序,javascript,arrays,sorting,lodash,Javascript,Arrays,Sorting,Lodash,我有一个JavaScript对象数组。我的数组定义如下: var myObjects = [ { id: '1', username: 'bill.jones', active: true, createdon: '03/29/2014' }, { id: '2', username: 'woohoo', active: true, createdon: '03/28/2014' }, { id: '3', username: 'someuser', active: true, cr

我有一个JavaScript对象数组。我的数组定义如下:

var myObjects = [
  { id: '1', username: 'bill.jones', active: true, createdon: '03/29/2014' },
  { id: '2', username: 'woohoo', active: true, createdon: '03/28/2014' },
  { id: '3', username: 'someuser', active: true, createdon: '03/30/2014' }
];
这个数组实际上是动态填充的。尽管如此,我仍然需要按createdon值按升序对结果进行排序。为了做到这一点,我尝试使用洛达斯。createdon值表示一个日期。目前,我正在尝试以下方法:

//  ORDER BY createdOn
myObjects.sort(function (a, b) {
  var date1 = new Date(a['createdon']);
  var date2 = new Date(b['createdon']);
  return date1 < date2;
});

_.forEach(myObjects, function(result) {
  console.log(result);
});
//按createdOn排序
myObjects.sort(函数(a,b){
var date1=新日期(a['createdon']);
var date2=新日期(b['createdon']);
返回日期1<日期2;
});
_.forEach(对象、函数(结果){
控制台日志(结果);
});
不幸的是,在我运行此函数后,MyObject仍然没有排序。我做错了什么


谢谢大家!

问题在于
sort
需要一个返回-1、0或1的函数。函数只返回0和1

这一微小的变化应该可以解决这个问题:

myObjects.sort(function (a, b) {
  var date1 = new Date(a['createdon']);
  var date2 = new Date(b['createdon']);
  return date1 - date2;
});

我刚看过洛达斯医生,也许还有你

试试看:


编辑:正如Cookie Monster指出的,重要的是您的
createdon
字段是日期,而不是字符串为什么不干脆
返回日期1-date2?我假设sort需要-1、0或1Thanks@RocketHazmat。已更新。它只需要负数/正数或
0
。但是相同的两个项目之间的返回结果应该总是相同的。这不需要是
date1.getTime()
那么您是在比较自epoch以来的毫秒数吗?您是在按字符串值排序,这可能会失败。您需要首先转换为日期。现在您正在更改数据结构。你应该提供一个适合实际情况的解决方案。我明白你的意思,但考虑到问题的上下文信息,我认为这是OP的一个潜在解决方案。不过,谢谢你,我会记住这一点。如果日期的格式像YYMMDD,其中按时间顺序排序=我的字符串排序,它将作为字符串工作,我需要
desc
order,所以我使用了
.orderBy(arrOfObjs,'sort\u key','desc')
。这个方法非常强大,你应该看看上面的文档。
var myObjects = [
    { id: '1', username: 'bill.jones', active: true, createdon: new Date('03/29/2014') },
    { id: '2', username: 'woohoo', active: true, createdon: new Date('03/28/2014') },
    { id: '3', username: 'someuser', active: true, createdon: new Date('03/30/2014') }
];

myObjects = _.sortBy(myObjects, 'createdon');

_.forEach(myObjects, function (result) {
    console.log(result);
});