Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript array.filter by element in children

I have an Array of objects (clients) like this:

"{"client_id":"AAA1","contracts":[{"contract_id":"CON1-AAA1","revisions":[{"date":"2018-07-30","status":"First Sign"}]}]}"

I can filter by client_id with no problem:

var query = clients.filter(x => x.client_id == "AAA1");

However, I'd like to filter by revision date or status, I tested doing the following, but I get the error "Uncaught TypeError: Cannot read property 'status' of undefined"

var query = clients.filter(x => x.contracts.revisions.status == "First Sign");

Is it possible to do it this way or Im delusional? :)

like image 275
korocota Avatar asked Aug 31 '25 22:08

korocota


1 Answers

You can achieve that by using a combination of an Array#filter and two Array#some :

const clients = [{
  "client_id": "AAA1",
  "contracts": [{
    "contract_id": "CON1-AAA1",
    "revisions": [{
      "date": "2018-07-30",
      "status": "First Sign"
    }]
  }]
}, {
  "client_id": "AAA2",
  "contracts": [{
    "contract_id": "CON1-AAA2",
    "revisions": [{
      "date": "2018-08-30",
      "status": "Second Sign"
    }]
  }]
}];

let result = clients.filter(cl => cl.contracts.some(c => c.revisions.some(r => r.status == 'First Sign')));
console.log(result);
like image 118
Zenoo Avatar answered Sep 03 '25 23:09

Zenoo