之前,我将2个数组合并为一个数组并使用sort()
,我可以按created_at
对它们进行排序。
let result = [...item.messages, ...item.chat_messages]
result.sort((a, b) => new Date(b.created_at) - new Date(a.created_at))
item.messages = result
现在,我处于另一种情况。我想在这个数组中再添加一个数组(sms_messages),但是希望它按scheduled_at
字段排序。
用这种方法可以实现吗?
let result = [...item.messages, ...item.chat_messages, ...item.sms_messages]
// and order by messages' and chat_messages' created_at (like above) together as
// sms_messages' sheduled_at
答案 0 :(得分:1)
您可以使用||
获取它找到的两个属性中的第一个,假设每个对象至少具有两个属性中的一个,但scheduled_at
优先:
result.sort((a, b) =>
new Date(b.scheduled_at || b.created_at) - new Date(a.scheduled_at || a.created_at))
答案 1 :(得分:0)
只需检查哪个属性存在并使用它对对象进行排序。
const sortByDate = props => {
return (a, b) => {
let propA = props.find(p => a.hasOwnProperty(p));
let propB = props.find(p => b.hasOwnProperty(p));
if(!propA || !propB) return 0;
return new Date(b[propB]) - new Date(a[propA]);
};
}
result.sort(sortByDate(['scheduled_at', 'created_at']));