recurse on object keys

by Gerald Gillespie

JavaScript

const recursiveSearch = (obj, searchKey, results = [], keys=[]) => {
   const r = results;
   const k = keys;
   Object.keys(obj).forEach(key => {
      const value = obj[key];
      if(searchKey.test(key) && typeof value !== 'object'){
         r.push(value);
         k.push(key)
      }else if(typeof value === 'object'){
      	k.push(key)
         recursiveSearch(value, searchKey, r,k);
      }else{
      	k.push(key)
      }
   });
   return [r,k]
};

const obj = {
  "messageHeader": {
    "organizationName": "string",
    "sequenceNumber": 0,
    "userId": "string",
    "sourceApplication": "string",
    "orgAlias": "string"
  },
  "payload": {
    "createAccession": {
      "accessionContactInfo": [
        {
          "contactDate": "string",
          "contactInfo": "string",
          "followUpComplete": true,
          "followUpDate": "string",
          "followUpUserId": "string",
          "printOnStatement": true,
          "printableNotes": "string",
          "userId": "string",
          "voided": true
        }
      ],
      "accessionId": "string",
      "accessionLevelDiagnosisCodes": [
        {
          "clientContact": "string",
          "clientContactDate": "string",
          "comment": "string",
          "deleted": true,
          "diagnosisCode": "string",
          "diagnosisCodeOrder": 0,
          "documentId": "string",
          "narrativeDiag": "string",
          "userId": "string",
          "voidType": "string"
        }
      ],
      "additionalReportCopy": [
        {
          "address": {
            "addressLine1": "string",
            "addressLine2": "string",
            "city": "string",
            "countryCode": "string",
            "region": "string",
            "state": "string",
            "zip": "string"
          },
          "clientId": "string",
          "contactMethodType": "string",
          "email": "string",
          "fax": "string",
          "name": "string",
          "phone": "string"
       ...