27 NİSAN 2010, Salı
Nesne dizisi özelliklere göre filtrelemek için Nasıl?Javascript:
Emlak ev nesneleri aşağıdaki JavaScript JSON dizi var:
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;
Yapmak istediğim "ev" nesne. bu nesne bir alt kümesini döndürmek için bir filtre yapmak mümkün olacak.
Örneğin, TEMEL filtre edebilmek istiyorum: , *, *7price
sqft
, ve num_of_baths
.
Soru:Nasıl pseudo-kod aşağıdaki gibi: javascript ile bir şeyler yapabilir miyim
var newArray = homes.filter(
price <= 1000 &
sqft >= 500 &
num_of_beds >=2 &
num_of_baths >= 2.5 );
Not sözdizimi tam olarak yukarıdaki gibi olmak zorunda değildir. Bu sadece bir örnek.
CEVAP
27 NİSAN 2010, Salı
Array.prototype.filter
yöntemi kullanabilirsiniz:
homes.filter(function (el) {
return el.price <= 1000 &&
el.sqft >= 500 &&
el.num_of_beds >=2 &&
el.num_of_baths >= 2.5;
});
Bu yöntem ECMAScript 5th Edition yeni standart bir parçası olduğunu, ve hemen hemen tüm modern tarayıcılar üzerinde bulunabilir.
YANİ, uyumluluk için aşağıdaki yöntemi vardır:
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i ) {
if (i in this) {
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
Bunu Paylaş:
Nasıl verimli bir şekilde anahtarları/...
nasıl JavaScript bir nesne anahtarı ka...
Nasıl bir Tarih klon JavaScript için n...
Nasıl tüm özellikleri Javascript bir N...
Nasıl string bir dizi nesne dizisi dön...