【发布时间】:2010-12-27 08:49:47
【问题描述】:
如何使用 JavaScript“filter”属性过滤我的 JavaScript 对象?
我一直在阅读以下StackOverflow post,并且处于类似情况。
我有以下 JavaScript 对象:
{
'cars' :
[{
"car_id" : "1",
"price" : "42999",
"make_id" : "050",
"year_built" : "2007",
"color_id" : "832"
},
..........
]}
我正在使用 JQuery 来显示控件以允许人们根据以下条件进行过滤:价格、品牌、建造年份、颜色
根据其他帖子,我可以使用以下代码:
// if using an old browser, define the 'filter' attribute
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp*/)
{
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = new Array();
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;
};
}
然后要执行实际的过滤器,我可以这样做:
result = cars.
filter(function(p) { return p.price >= 15000 }).
filter(function(p) { return p.price <= 40000 }).
filter(function(p) { return p.year_built >= 2000 }) etc
我不明白的是,一旦设置了过滤器,我如何使用我的 JQuery 控件动态更改 filter? 意思是,假设我已经应用了过滤器在上面,然后用户改变了主意,想要将他们愿意为汽车支付的最高金额从 40,000 美元增加到 50,000 美元。
我将如何修改我的过滤器:
filter(function(p) { return p.price <= 40000 }).
到:
filter(function(p) { return p.price <= 50000 }).
【问题讨论】:
标签: javascript jquery html