2016-08-20 4 views
0

Ich möchte ein Array mit verschachtelten Objekten nach einem beliebigen Wert durchsuchen und dann das Objekt zurückgeben, in dem es gefunden wurde, um es in ein neues Array zu platzieren.Array von Objekten einschließlich verschachtelter Objekte durchsuchen

Zur Zeit hat ich:

var json = { 
    'offices': [{ 
     "home_id": "1", 
     "price": "925", 
     "sqft": "1100", 
     "num_of_beds": "2", 
     "num_of_baths": "2.0", 
     "types": { 
      "0": "Internet", 
      "1": "msn", 
      "2": "aol" 
     } 
    }, { 
     "home_id": "2", 
     "price": "1425", 
     "sqft": "1900", 
     "num_of_beds": "4", 
     "num_of_baths": "2.5", 
     "types": { 
      "0": "Internet", 
      "1": "google", 
      "2": "virgin" 
     } 
    }] 
} 

var theOffices = json.offices; 

var result = $.grep(theOffices, function (h) { 
    return h.home_id == 1 
    && h.price == 925 
}); 

console.log(result) 

I .grep $ verwenden kann, wie oben gezeigt zu suchen, dies jedoch nur auf dem ersten Objekt sucht, nicht die verschachtelten ... Dh, wie würde ich diesen Einsatz verlängern von $ .grep, um über die 'Typen' zu iterieren - sagen wir zum Beispiel 'msn' ??

HILFE BITTE :) :) Haare ziehen für die letzten 6 Stunden!

+0

Sie brauchen nicht diese Texte selbst zu schreiben, nicht wahr? Hast du eine Bibliothek wie lodash angeschaut? –

+0

Nur um klar zu sein, meinst du, du willst eine Funktion haben, die du aufrufen kannst wie 'search (theOffices, 'msn')' und ein Array aller Objekte zurückgeben, in denen 'msn' als Wert von erscheint eine Eigenschaft oder der Wert einer Eigenschaft auf einem ihrer "Kind" -Objekte, in jeder Tiefe? –

Antwort

0

Sie können dazu einen Array-Filter() verwenden. Schauen Sie sich die folgenden:

var json = { 
 
    'offices': [{ 
 
     "home_id": "1", 
 
     "price": "925", 
 
     "sqft": "1100", 
 
     "num_of_beds": "2", 
 
     "num_of_baths": "2.0", 
 
     "types": { 
 
      "0": "Internet", 
 
      "1": "msn", 
 
      "2": "aol" 
 
     } 
 
    }, { 
 
     "home_id": "2", 
 
     "price": "1425", 
 
     "sqft": "1900", 
 
     "num_of_beds": "4", 
 
     "num_of_baths": "2.5", 
 
     "types": { 
 
      "0": "Internet", 
 
      "1": "google", 
 
      "2": "virgin" 
 
     } 
 
    }, { 
 
     "home_id": "1", 
 
     "price": "925", 
 
     "sqft": "1980", 
 
     "num_of_beds": "6", 
 
     "num_of_baths": "9.5", 
 
     "types": { 
 
      "0": "InterNope", 
 
      "1": "google", 
 
      "2": "virgin" 
 
     } 
 
    } 
 
    ] 
 
} 
 

 
var theOffices = json.offices; 
 

 
var results = theOffices.filter(function(f) { 
 
    return f.home_id == "1" && f.price == "925"; 
 
}); 
 

 
console.log("res"); 
 
console.log(results);

Verwandte Themen