我有一个未排序的对象数组,它具有两个相关属性:type和date。我需要对这个数组进行排序:
deposit应优先于withdrawal)下面是一个输入示例:
let i = [
{
date:'2017',
type:'withdrawal',
amount:-5
},
{
date:'2016',
type:'deposit',
amount:12
},
{
date:'2018',
type:'deposit',
amount:54
},
{
date:'2017',
type:'deposit',
amount:20
},
{
date:'2016',
type:'withdrawal',
amount:55
},
{
date:'2018',
type:'withdrawal',
amount:54
}
] 目标是输出类似这样的内容:
let o = [
{
date:'2016',
type:'deposit',
amount:12
},
{
date:'2016',
type:'withdrawal',
amount:55
},
{
date:'2017',
type:'deposit',
amount:20
},
{
date:'2017',
type:'withdrawal',
amount:-5
},
{
date:'2018',
type:'deposit',
amount:54
},
{
date:'2018',
type:'withdrawal',
amount:54
}
]到目前为止,我使用以下方法按日期对数组进行排序:
o = i.sort((a,b)=>(a.date - b.date))但我找不到一种按类型分类的方法
发布于 2018-11-17 06:39:05
你可以像下面这样使用“排序”。通过使用"localeCompare“,它将按递增的顺序对”类型“进行排序,即”存款“在”取款“之前,而"d”则在"w“之前。
就是用这个-
i.sort((a,b) => ((+a.date) - (+b.date) || (a.type.localeCompare(b.type))))
let i = [
{
date:'2017',
type:'withdrawal',
amount:-5
},
{
date:'2016',
type:'deposit',
amount:12
},
{
date:'2018',
type:'deposit',
amount:54
},
{
date:'2017',
type:'deposit',
amount:20
},
{
date:'2016',
type:'withdrawal',
amount:55
},
{
date:'2018',
type:'withdrawal',
amount:54
}
]
i.sort((a,b) => ((+a.date) - (+b.date) || (a.type.localeCompare(b.type))))
console.log(i)
发布于 2018-11-17 06:58:09
可以使用string#localCompare对数组进行排序,首先是基于date,然后是基于type。
let arr = [ { date:'2017', type:'withdrawal', amount:-5 }, { date:'2016', type:'deposit', amount:12 }, { date:'2018', type:'deposit', amount:54 }, { date:'2017', type:'deposit', amount:20 }, { date:'2016', type:'withdrawal', amount:55 }, { date:'2018',type:'withdrawal', amount:54 } ];
arr.sort((a,b) => a.date.localeCompare(b.date) || a.type.localeCompare(b.type));
console.log(arr);
发布于 2018-11-17 07:13:45
虽然可能不是最理想的解决方案,但我将类型作为Array.prototype.sort方法中"a“和"b”的字符串连接到date上,并根据该字符串对数组进行排序。
i.sort((a,b) => {
let aStr = `${a.date}${a.type}`;
let bStr = `${b.date}${b.type}`;
if(aStr > bStr) {
return 1;
} else if(aStr === bStr) {
return 0;
} else {
return -1;
}
});希望这能帮上忙!
https://stackoverflow.com/questions/53348869
复制相似问题