SORU
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: , *, *7pricesqft, 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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • Ludique

    Ludique

    21 NİSAN 2009
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010