Panda
Panda

Reputation: 415

How to display array based on date in javascript

Here's the code:

list.component.ts

const data1 = [
      {
        dateStart: "2020-02-14 00:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server1'
      }
    ];

    const data2 = [
      {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-12 11:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-11 11:00:01",
        name: 'Server2'
      },
    ]

    const arr = new Array();

    arr.push(data1, data2);


    arr.forEach(server => {
      const rec = orderBy(server, ['dateStart'], ['desc']);

  console.log(rec);
    });
  }

What I want is if the data1 have an array(16) then the data2 have an array(20) and both them have the same date but the data2 have oldest data that shouldn't display.

output should be like this:

[
  {
    dateStart: "2020-02-14 00:00:01",
    name: "Server1"
  },
  {
    dateStart: "2020-02-13 14:00:01",
    name: "Server1"
  },
  {
    dateStart: "2020-02-13 13:00:01",
    name: "Server1"
  },
  {
    dateStart: "2020-02-13 12:00:01",
    name: "Server1"
  },
  {
    dateStart: "2020-02-13 11:00:01",
    name: "Server1"
  }
],
[
  {
    dateStart: "2020-02-13 14:00:01",
    name: 'Server2'
  },
  {
    dateStart: "2020-02-13 13:00:01",
    name: 'Server2'
  },
  {
    dateStart: "2020-02-13 12:00:01",
    name: 'Server2'
  },
  {
    dateStart: "2020-02-13 11:00:01",
    name: 'Server2'
  }
]

here's the code: https://stackblitz.com/edit/angular-akhhbp

if there's a new array. which is the data3 and it has an array(25) then it will compare each other. like data1, data2 and data3 if there date doesn't match it will not display.

example:

data1 = [{
        dateStart: "2020-02-13 14:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server1'
      }]
    data2 = [ {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-12 11:00:01",
        name: 'Server2'
      }],
    data3 = [ {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server3'
      },
      {
        dateStart: "2020-02-13 13:12:01",
        name: 'Server3'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server3'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server3'
      },
      {
        dateStart: "2020-02-12 10:00:01",
        name: 'Server3'
      }]

the output should be.

[{
            dateStart: "2020-02-13 14:00:01",
            name: 'Server1'
          },
          {
            dateStart: "2020-02-13 13:00:01",
            name: 'Server1'
          },
          {
            dateStart: "2020-02-13 12:00:01",
            name: 'Server1'
          }],
 [ {
            dateStart: "2020-02-13 14:00:01",
            name: 'Server2'
          },
          {
            dateStart: "2020-02-13 13:00:01",
            name: 'Server2'
          },
          {
            dateStart: "2020-02-13 12:00:01",
            name: 'Server2'
          }],
[ {
            dateStart: "2020-02-13 14:00:01",
            name: 'Server3'
          },
          {
            dateStart: "2020-02-13 13:12:01",
            name: 'Server3'
          },
          {
            dateStart: "2020-02-13 12:00:01",
            name: 'Server3'
          },
          {
            dateStart: "2020-02-13 11:00:01",
            name: 'Server3'
          },
          {
            dateStart: "2020-02-12 10:00:01",
            name: 'Server3'
          }]

Upvotes: 2

Views: 157

Answers (2)

Darpanjbora
Darpanjbora

Reputation: 173

I will put up the solution this way -

  • Before merging the arrays, sort them if they are not sorted (descending order). Use array.sort() for it.
  • For merging, put the first array data1 in a new array, and save the last record for this array in temp variable. let temp = data1[data1.length -1].dateStart. Because you don't need data from other arrays older than this date.
  • Iterate over remaining arrays data2, data3, ... and push the data in a new array if the dateStart is not older than temp.

Upvotes: 2

shahabvshahabi
shahabvshahabi

Reputation: 955

if you want to save your data like this all you need is using spread operator (...) like so :

const data1 = [
      {
        dateStart: "2020-02-14 00:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server1'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server1'
      }
    ];

    const data2 = [
      {
        dateStart: "2020-02-13 14:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 13:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 12:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-13 11:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-12 11:00:01",
        name: 'Server2'
      },
      {
        dateStart: "2020-02-11 11:00:01",
        name: 'Server2'
      },
    ]

let final = [[...data1] , [...data2] , ... more arrays];

and the output is :

[ [ { dateStart: '2020-02-14 00:00:01', name: 'Server1' },
    { dateStart: '2020-02-13 14:00:01', name: 'Server1' },
    { dateStart: '2020-02-13 13:00:01', name: 'Server1' },
    { dateStart: '2020-02-13 12:00:01', name: 'Server1' },
    { dateStart: '2020-02-13 11:00:01', name: 'Server1' } ],
  [ { dateStart: '2020-02-13 14:00:01', name: 'Server2' },
    { dateStart: '2020-02-13 13:00:01', name: 'Server2' },
    { dateStart: '2020-02-13 12:00:01', name: 'Server2' },
    { dateStart: '2020-02-13 11:00:01', name: 'Server2' },
    { dateStart: '2020-02-12 11:00:01', name: 'Server2' },
    { dateStart: '2020-02-11 11:00:01', name: 'Server2' } ] ]

Upvotes: 0

Related Questions