当前位置:  开发笔记 > 编程语言 > 正文

JavaScript:如何创建一个Object并过滤这些属性?

如何解决《JavaScript:如何创建一个Object并过滤这些属性?》经验,为你挑选了3个好方法。

我有一系列像这样的房子,

{
    "homes" : [{
        "home_id"         : "1",
        "address"         : "321 Main St",
        "city"            : "Dallas",
        "state"           : "TX",
        "zip"             : "75201",
        "price"           : "925",
        "sqft"            : "1100",
        "year_built"      : "2008",
        "account_type_id" : "2",
        "num_of_beds"     : "2",
        "num_of_baths"    : "2.0",
        "geolat"          : "32.779625",
        "geolng"          : "-96.786064",
        "photo_id"        : "14",
        "photo_url_dir"   : "\/home_photos\/thumbnail\/2009\/06\/10\/"
    }],
    ..........
}

我想提供3种不同的搜索方法.

如何返回此家庭区域数组的子集:

priceX和Y之间

所述bathrooms> = Z

#bedrooms= = A或== B或== C.

例如,我如何创建psuedo代码,如:

homes.filter {price >= 150000, price <= 400000, bathrooms >= 2.5, bedrooms == 1 | bedrooms == 3}

user187291.. 15

Javascript 1.6(FF,基于Webkit)具有内置的Array.filter功能,因此无需重新发明轮子.

result = homes.
  filter(function(p) { return p.price >= 150000 }).
  filter(function(p) { return p.price <= 400000 }).
  filter(function(p) { return p.bathrooms >= 2.5 }) etc

对于msie后备,请参阅上面链接的页面.



1> user187291..:

Javascript 1.6(FF,基于Webkit)具有内置的Array.filter功能,因此无需重新发明轮子.

result = homes.
  filter(function(p) { return p.price >= 150000 }).
  filter(function(p) { return p.price <= 400000 }).
  filter(function(p) { return p.bathrooms >= 2.5 }) etc

对于msie后备,请参阅上面链接的页面.



2> 小智..:

看看JSONPath http://code.google.com/p/jsonpath/

像jsonPath(json,"$ .. homes [?(@.price <400000)]").toJSONString()之类的东西应该可行.

JAQL对于过滤JSON也很有趣. http://www.jaql.org/



3> James..:

干得好:

var filteredArray = filter(myBigObject.homes, {

    price: function(value) {
        value = parseFloat(value);
        return value >= 150000 && value <= 400000;
    },

    num_of_baths: function(value) {
        value = parseFloat(value);
        return value >= 2.5;
    },

    num_of_beds: function(value) {
        value = parseFloat(value);
        return value === 1 || value === 3;
    }

});

filter功能:

function filter( array, filters ) {

    var ret = [],
        i = 0, l = array.length,
        filter;

    all: for ( ; i < l; ++i ) {

        for ( filter in filters ) {
            if ( !filters[filter](array[i][filter]) ) {
                continue all;
            }
        }

        ret[ret.length] = array[i];

    }

    return ret;

}

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有