[英]How to merge objects of array together if a condition match ? Javascirpt
如果条件匹配,如何将数组对象合并在一起。 对象数组中的条件我需要将开始时间和结束时间合并在一起。
我有一个这样的数组
[
{id: 909, room: "room1", name: "end", timestamp: '10:00'},
{id: 908, room: "room1", name: "start", timestamp: '09:00'},
{id: 907, room: "room1", name: "end", timestamp: '08:00'},
{id: 906, room: "room1", name: "start", timestamp: '07:00'},
]
从上面的数组中,如果name: "end"
的下一个索引是name:start
那么我想将它们配对在一起。 数组现在看起来像这样
[
{room: "room1", endTimestamp: '10:00', startTimetamp: '09:00'},
{room: "room1", endTimestamp: '08:00', startTimetamp: '07:00'},
]
也可能存在数组可以以name:start
并且还没有结束时间的实例,它看起来像这样
[
{id: 910, room: "room1", name: "start", timestamp: '11:00'},
{id: 909, room: "room1", name: "end", timestamp: '10:00'},
{id: 908, room: "room1", name: "start", timestamp: '09:00'},
{id: 907, room: "room1", name: "end", timestamp: '08:00'},
{id: 906, room: "room1", name: "start", timestamp: '07:00'},
]
在这种情况下,数组应如下所示
[
{ room: "room1", endTimestamp: null, startTimetamp: '11:00'},
{ room: "room1", endTimestamp: '10:00', startTimetamp: '09:00'},
{ room: "room1", endTimestamp: '08:00', startTimetamp: '07:00'},
]
谢谢你。
可能有更短的答案,但我想用最简单的方式来解释:
首先,您必须创建一个结果数组:
const InputArray = [/*your array here*/];
const ResultArray = [];
然后您可以遍历数组以查找“开始”行并为每个开始行创建一个ResultRow :
for( let i=0 ; i < InputArray.length ; i++ ) {
if( InputArray[i].name !== 'start' )
continue;
const ResultRow = {
room: InputArray[i].room,
startTimetamp: InputArray[i].timestamp,
endTimetamp: null
};
// check previous index
if( i-1 >= 0 )
if( InputArray[i-1].name === 'end' )
if( InputArray[i].room === InputArray[i-1].room )
ResultRow.endTimestamp = InputArray[i-1].timestamp ;
ResultArray.push(ResultRow);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.