繁体   English   中英

如果条件匹配,如何将数组对象合并在一起? Java脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM