Javascript 按属性对三个不同的对象数组进行排序
我有三个不同的对象数组,需要对Javascript 按属性对三个不同的对象数组进行排序,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有三个不同的对象数组,需要对日期字段进行排序,其中每个组中的字段都有不同的名称 下面是我的数据示例: const documents = [ { documentId: 'ADB0125A', fileName: 'test_2018.pdf', date': '2017-12-02T19:08:52+01:00' // Field to sort by }, { documentId: '123456', fileName: 'test2_2018.
日期
字段进行排序,其中每个组中的字段都有不同的名称
下面是我的数据示例:
const documents = [
{
documentId: 'ADB0125A',
fileName: 'test_2018.pdf',
date': '2017-12-02T19:08:52+01:00' // Field to sort by
},
{
documentId: '123456',
fileName: 'test2_2018.pdf',
date': '2017-12-12T22:08:52+01:00' // Field to sort by
},
{
documentId: '121212',
fileName: 'test3_2018.pdf',
date': '2018-05-22T23:08:52+01:00' // Field to sort by
}];
const conversations = [
{
conversationId: '1102',
lastUpdate: '2015-10-10T18:19:12+01:00' // Field to sort by
},
{
conversationId: '5622',
lastUpdate: '2019-08-16T18:19:12+01:00' // Field to sort by
},
{
conversationId: '112',
lastUpdate: '2015-10-26T18:19:12+01:00' // Field to sort by
}];
const invoices = [
{
invoiceId: "20100392077",
rechnungsDatum: "2019-02-10" // Field to sort by
},
{
invoiceId: "5550392077",
rechnungsDatum: "2018-02-05" // Field to sort by
},
{
invoiceId: "3336392077",
rechnungsDatum: "2018-12-11" // Field to sort by
}];
目标:返回最新的4个结果(我可以使用.reverse()
在列出最后一组ASC
后获得),独立于它们的来源。我希望得到:
const result = [
{
conversationId: '5622',
lastUpdate: '2019-08-16T18:19:12+01:00'
},
{
invoiceId: "20100392077",
rechnungsDatum: "2019-02-10"
},
{
invoiceId: "3336392077",
rechnungsDatum: "2018-12-11"
},
{
documentId: '121212',
fileName: 'test3_2018.pdf',
date': '2018-05-22T23:08:52+01:00'
}
]
是否可以对所有三个对象使用唯一的
数组。排序
方法,或者唯一的方法是成对比较它们并根据部分结果生成结果?您可以通过以下步骤执行此操作:
- 首先使用嵌套的
添加另一个属性,该属性的名称为map()
,其值将是需要对对象进行排序的值键
- 然后使用
flat()
- 然后根据我们在map中添加的键的值应用
,然后应用sort()
sort()
const documents=[{documentId:'ADB0125A',fileName:'test_2018.pdf',date:'2017-12-02T19:08:52+01:00',{documentId:'123456',fileName:'test2_2018.pdf',date:'2017-12-12T22:08:52+01:00',{documentId:'121212',fileName:'test3_2018.pdf',date:'2018-05-22T23:08:52+01:00'];const conversations=[{conversationId:'1102',lastUpdate:'2015-10-10T18:19:12+01:00',{conversationId:'5622',lastUpdate:'2019-08-16T18:19:12+01:00',{conversationId:'112',lastUpdate:'2015-10-26T18:19:12+01:00}];施工发票=[{invoiceId:“20100392077”,rechnungsDatum:“2019-02-10”},{invoiceId:“5550392077”,rechnungsDatum:“2018-02-05”},{invoiceId:“3336392077”,rechnungsDatum:“2018-12-11”}];
让keys=['date','lastUpdate','rechnungsDatum'];
const res=[文件、对话、发票]
.map((x,i)=>x.map(a=>(
{…a,key:a[key[i]})
).flat()
.sort((a,b)=>a.key.localeCompare(b.key))
.slice(-4)
.reverse()
.map(({key,…rest})=>rest)
console.log(res)
您可以编写以下内容
const结果=[
{
会话ID:'5622',
最新更新:“2019-08-16T18:19:12+01:00”
},
{
发票ID:“20100392077”,
回复:“2019-02-10”
},
{
发票编号:“3336392077”,
回复:“2018-12-11”
},
{
documentId:'121212',
文件名:“test3_2018.pdf”,
日期:“2018-05-22T23:08:52+01:00”
}
]
let字段=[“日期”、“rechnungsDatum”、“lastUpdate”];
结果.排序((a,b)=>{
让dateA,dateB;
fields.forEach(字段=>{
如果(a.hasOwnProperty(字段))
dateA=新日期(a[字段]);
如果(b.hasOwnProperty(字段))
dateB=新日期(b[字段]);
});
返回日期a-日期b;});
log(result.reverse())代码>您可以获取一个对象,该对象具有所需日期属性的replacemnt键和一个平面数组,该数组保留源属性和一个规范化的日期属性,对数组进行排序,并返回前四个元素
最后,删除不必要的信息并检索原始对象结构
const
documents=[{documentId:'ADB0125A',fileName:'test_2018.pdf',date:'2017-12-02T19:08:52+01:00'},{documentId:'123456',fileName:'test2_2018.pdf',date:'2017-12-12T22:08:52+01:00'},{documentId:'121212',fileName:'test3_2018.pdf',date 2018-05-22T23:08:52+01:00'},
conversations=[{conversationId:'1102',lastUpdate:'2015-10-10T18:19:12+01:00'},{conversationId:'5622',lastUpdate:'2019-08-16T18:19:12+01:00'},{conversationId:'112',lastUpdate:'2015-10-26T18:19:12+01:00'},
发票=[{invoiceId:“20100392077”,rechnungsDatum:“2019-02-10”},{invoiceId:“5550392077”,rechnungsDatum:“2018-02-05”},{invoiceId:“3336392077”,rechnungsDatum:“2018-12-11”}]
关键字={文档:'date',对话:'lastUpdate',发票:'rechnungsDatum'},
结果=对象
.条目({文档、对话、发票})
.reduce((r[k,v])=>[…r,…v.map(payload=>({payload,date:payload[keys[k]}]),[]))
.sort((a,b)=>b.date.localeCompare(a.date))
.slice(0,4)
.map(({payload})=>有效载荷);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以向所有数组中的每个对象添加一个sortBy
字段。然后合并对象数组并根据自定义字段进行排序。获得前4名的结果。然后通过
列删除排序:
const documents=[{documentId:'ADB0125A',文件名:'test_2018.pdf',日期:'2017-12-02T19:08:52+01:00'},{documentId:'123456',文件名:'test2_2018.pdf',日期:'2017-12-12T22:08:52+01:00'},{documentId:'121212',文件名:'test3_2018.pdf',日期:'2018-05-22T23:08:52+01:00'},
conversations=[{conversationId:'1102',lastUpdate:'2015-10-10T18:19:12+01:00'},{conversationId:'5622',lastUpdate:'2019-08-16T18:19:12+01:00'},{conversationId:'112',lastUpdate:'2015-10-26T18:19:12+01:00'},
发票=[{invoiceId:“20100392077”,rechnungsDatum:“2019-02-10”},{invoiceId:“5550392077”,rechnungsDatum:“2018-02-05”},{invoiceId:“3336392077”,rechnungsDatum:“2018-12-11”}];
const addSortBy=(arr,sortBy)=>arr.map(a=>({…a,sortBy:new Date(a[sortBy])),
takeCount=4;//输出中需要的项目数
//所有对象都有一个要排序的字段的额外键
const merged=[…addSortBy(文件,“日期”),
…通过(对话,“最新更新”),
…通过(发票)添加,回复