Kako filtrirati predmetno polje na podlagi atributov?
Imam naslednje polje nepremičninskih objektov v javascriptu:
var json = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
// ... (more homes) ...
]
}
var xmlhttp = eval('(' + json + ')');
homes = xmlhttp.homes;
Želel bi, da bi lahko izvedel filter na tem objektu in vrnil podmnožico objektov "home".
Na primer, želim, da bi lahko filtriral na podlagi: cena
, kvadratna površina
, število_ležišč
in število_kopeli
.
Kako lahko v javascriptu izvedem nekaj podobnega, kot je spodnja psevdokoda:
var newArray = homes.filter(
price <= 1000 &
sqft >= 500 &
num_of_beds >=2 &
num_of_baths >= 2.5 );
Upoštevajte, da sintaksa ni nujno natanko takšna, kot je navedena zgoraj. To je le primer.
420
3
Uporabite lahko metodo
Array.prototype.filter
:Primer v živo:
Ta metoda je del novega standarda ECMAScript 5th Edition in jo je mogoče najti v skoraj vseh sodobnih brskalnikih.
Za IE lahko zaradi združljivosti vključite naslednjo metodo:
Poskusite uporabiti ogrodje, kot je jLinq - spodaj je vzorec kode za uporabo jLinq.
Za več informacij lahko sledite povezavi http://www.hugoware.net/projects/jlinq.
To lahko storite zelo enostavno - verjetno obstaja veliko izvedb, med katerimi lahko izbirate, vendar je to moja osnovna zamisel (in verjetno obstaja kakšna oblika, v kateri lahko iterirate nad objektom z jQueryjem, vendar se je zdaj ne morem spomniti):
In potem bi lahko to funkcijo priklicali na naslednji način:
Na ta način lahko filter sprožite na podlagi katerega koli predikata, ki ga določite, ali celo večkrat filtrirate z manjšimi filtri.