我有一个对象数组:
arr = [
{
name : 'Gary',
DOB : '01/01/1980',
importance: 'High'
},
{
name : 'Bill',
DOB : '01/01/1985',
importance: 'High'
},
{
name : 'Joe',
DOB : '01/01/1981',
importance: 'Medium'
},
{
name : 'Phillip',
DOB : '01/01/1981',
importance: 'High'
},
{
name : 'Ed',
DOB : '01/01/1980',
importance: 'Low'
},
{
name : 'Nix',
DOB : '01/01/1980',
importance: 'High'
},
{
name : 'Pat',
DOB : '01/01/1980',
importance: 'Low'
}
]
我按两个字段排序这些人,首先是DOB
,如果他们有相同的DOB,那么按importance
,从低到高,在顶部和高处低在底部。
我可以很容易地比较他们的日期,但在此之后我很难按其重要性排序?
有人可以提供任何建议吗?
var importanceOrder = ['Low', 'Normal', 'High'];
arr.sort(function(a, b) {
if(a.dueDate.value != b.dueDate.value){
return a.dueDate.value < b.dueDate.value ? -1 : 1;
} else {
//??
}
});
答案 0 :(得分:2)
您可以为imortance
的排序顺序获取一个对象,并获取一个获取ISO日期的函数。
const getISO = s => s.replace(/(..)\/(..)\/(....)/, '$3-$1-$2');
var array = [{ name: 'Gary', DOB: '01/01/1980', importance: 'High' }, { name: 'Bill', DOB: '01/01/1985', importance: 'High' }, { name: 'Joe', DOB: '01/01/1981', importance: 'Medium' }, { name: 'Phillip', DOB: '01/01/1981', importance: 'High' }, { name: 'Ed', DOB: '01/01/1980', importance: 'Low' }, { name: 'Nix', DOB: '01/01/1980', importance: 'High' }, { name: 'Pat', DOB: '01/01/1980', importance: 'Low' }],
order = { Low: 1, Normal: 2, High: 3 };
array.sort((a, b) => getISO(a.DOB).localeCompare(getISO(b.DOB)) || order[a.importance] - order[b.importance]);
console.log(array);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:-1)
好的,这非常简单,首先检查日期是否不同并按照这种方式对它们进行排序,然后如果它们相等(x - x == 0
将在第一个等式中返回false)检查它们的重要性,这很容易: )
arr.sort((a, b) => new Date(a.DOB) - new Date(b.DOB) || importanceOrder.indexOf(a.importance) - importanceOrder.indexOf(b.importance))