gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:11:19 24 4
gpt4 key购买 nike

我有以下房地产住宅对象的 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;

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

例如,我希望能够根据:price 进行过滤, sqft , num_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 - 如何根据属性过滤对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com