JavaScript如何根据属性过滤对象数组?

我有以下JavaScript数组的房地产主页对象:

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;

我想做的是能够对对象执行过滤,以返回“家庭”对象的子集。

例如,我想根据能够过滤:pricesqftnum_of_beds,和num_of_baths

如何在JavaScript中执行类似下面的伪代码的操作:

var newArray = homes.filter(

price <= 1000 &

sqft >= 500 &

num_of_beds >=2 &

num_of_baths >= 2.5 );

注意,语法不必与上面完全相同。这只是一个例子。

回答:

您可以使用以下Array.prototype.filter方法:

var newArray = homes.filter(function (el) {

return el.price <= 1000 &&

el.sqft >= 500 &&

el.num_of_beds >=2 &&

el.num_of_baths >= 2.5;

});

现场示例:

var obj = {

'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) ...

]

};

// (Note that because `price` and such are given as strings in your object,

// the below relies on the fact that <= and >= with a string and number

// will coerce the string to a number before comparing.)

var newArray = obj.homes.filter(function (el) {

return el.price <= 1000 &&

el.sqft >= 500 &&

el.num_of_beds >= 2 &&

el.num_of_baths >= 1.5; // Changed this so a home would match

});

console.log(newArray);

此方法是新ECMAScript 5th Edition标准的一部分,几乎可以在所有现代浏览器中找到。

对于IE,您可以包括以下兼容性方法:

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];

if (fun.call(thisp, val, i, this))

res.push(val);

}

}

return res;

};

}

以上是 JavaScript如何根据属性过滤对象数组? 的全部内容, 来源链接: utcz.com/qa/433416.html

回到顶部