我正在努力对两个级别进行排序。逻辑如下。如果任何对象具有状态,则返回具有状态的最新对象。如果没有对象有状态,则返回最近没有状态的对象。
var apps = [
{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: 'FAIL',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_result = [{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
var apps_2 = [
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: '',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 01 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_resul2 = [{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
我已经尝试过
var sorted = _.sort_by(apps, function (x) { x.date_updated });
我还看了其他一些SO questions但在第一次排序后无法将物体保持在原位。
最佳答案
如果我正确理解您的问题,这就是您要查找的内容。 http://jsfiddle.net/whxu5sea/3/
您需要过滤元素以确保它们具有任何类型的状态。然后按日期排序,最早的在前。然后获取第一个值。在我的示例中,我假设日期为字符串,但仍然应该有效。
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
在未提供状态的情况下检查其是否有效:http://jsfiddle.net/whxu5sea/4/
我希望这有帮助。如果需要任何进一步说明,请 LMK。
编辑:更新以获取最新元素(最后一个)。
关于具有两个属性的 JavaScript 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387456/