问题描述
我从Firebase获取了一个对象,但是需要更改默认项目顺序。为此,我使用Lodash orderBy()
方法。
computed: {
sortedLogs() {
return orderBy(this.logs,'date','desc')
}
},
现在的问题是此方法删除对象键,我需要这些键来管理项目删除请求。
原始
{
MFVMHJHnbpr: {
date: 1598270895
side: 'l'
},MFVMblsdfdPb: {
date: 1598270825
side: 'r'
},MsxvblsdfdPb: {
date: 1598271225
side: 'l'
},}
orderBy()
之后{
0: {
date: 1598270895
side: 'l'
},1: {
date: 1598270825
side: 'r'
},2: {
date: 1598271225
side: 'l'
},}
解决方法
您也可以使用普通JavaScript进行操作,但是如果要依赖元素的顺序,则必须将对象转换为数组。不能保证对象在JavaScript中具有规定的顺序(请参见here)。
const inp= {
MFVMHJHnbpr: {
date: 1598270895,side: 'l'
},MFVMblsdfdPb: {
date: 1598270825,side: 'r'
},MsxvblsdfdPb: {
date: 1598271225,side: 'l'
}
};
const out=Object.entries(inp).map(o=>(o[1].key=o[0],o[1])).sort((a,b)=>a.date-b.date)
console.log('Array:',out);
// alternatively,creating a "sorted object" - no guarantee!
const outObj=out.reduce((a,c)=>{let o={...c}; delete o.key; a[c.key]=o; return a;},{})
console.log('Object:',outObj);
,
orderBy
不会改变原始对象,因此您可以存储this.logs
的副本并将其用于删除。当然,这意味着您还必须在更改原始数据后更新sortedLogs
。