Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:我如何动态地;“过滤器”;我的物品_Javascript_Jquery_Html - Fatal编程技术网

JavaScript:我如何动态地;“过滤器”;我的物品

JavaScript:我如何动态地;“过滤器”;我的物品,javascript,jquery,html,Javascript,Jquery,Html,如何使用JavaScript“filter”属性作为筛选我的JavaScript对象 我一直在读下面的文章,我的处境也很相似 我有以下JavaScript对象: { 'cars' : [{ "car_id" : "1", "price" : "42999", "make_id" : "050", "year_built" : "2007", "color_id" : "832" }, .......... ]} 我

如何使用JavaScript“
filter
”属性作为筛选我的JavaScript对象

我一直在读下面的文章,我的处境也很相似

我有以下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;
  };
}
致:


filter(function(p){returnp.price您可以使用函数生成器

function createPriceFilter(price)
{
   filter =  function(){ return p.price >= price };
   return filter;
}
cars
    .filter( createPriceFilter( mySelectedPrice ) )
    .filter( createSomethingFilter(...) )
    . (...)
然后,在过滤时,始终使用函数生成器

function createPriceFilter(price)
{
   filter =  function(){ return p.price >= price };
   return filter;
}
cars
    .filter( createPriceFilter( mySelectedPrice ) )
    .filter( createSomethingFilter(...) )
    . (...)

你可以用一个函数发生器

function createPriceFilter(price)
{
   filter =  function(){ return p.price >= price };
   return filter;
}
cars
    .filter( createPriceFilter( mySelectedPrice ) )
    .filter( createSomethingFilter(...) )
    . (...)
然后,在过滤时,始终使用函数生成器

function createPriceFilter(price)
{
   filter =  function(){ return p.price >= price };
   return filter;
}
cars
    .filter( createPriceFilter( mySelectedPrice ) )
    .filter( createSomethingFilter(...) )
    . (...)

与其使用
过滤器,不如使用普通的旧循环:

var min_year = 2000;
var min_price = 15000;
var max_price = 40000;

function fillTable() {
    clearTheTable();
    for (i = 0; i < cars.length; i++) {
        var car = cars[i];
        if (p.price >= min_price && p.price <= max_price && p.year_built >= min_year)
            addCarToTable(car);
    }
}
var min_year=2000;
var最小价格=15000;
var最大价格=40000;
函数fillTable(){
clearTheTable();
对于(i=0;i=最低价格&价格=最低年)
可添加纸板箱(car);
}
}
每次参数更改时,只需再次调用
fillTable()
,即可重新生成整个表


(你可以做很多更聪明的事情,但这是我能想到的最简单的事情。)

与其使用
过滤器,不如使用一个简单的旧循环:

var min_year = 2000;
var min_price = 15000;
var max_price = 40000;

function fillTable() {
    clearTheTable();
    for (i = 0; i < cars.length; i++) {
        var car = cars[i];
        if (p.price >= min_price && p.price <= max_price && p.year_built >= min_year)
            addCarToTable(car);
    }
}
var min_year=2000;
var最小价格=15000;
var最大价格=40000;
函数fillTable(){
clearTheTable();
对于(i=0;i=最低价格&价格=最低年)
可添加纸板箱(car);
}
}
每次参数更改时,只需再次调用
fillTable()
,即可重新生成整个表

(你可以做很多更聪明的事情,但这是我能想到的最简单的事情。)

设置过滤器后,如何使用JQuery控件动态更改过滤器

您不必设置过滤器。您可以使用过滤器函数调用
filter()
,然后获取过滤后的数组;您不能更改之后应用于数组的过滤器。相反,您必须再次调用
filter()
,并传递不同的过滤器函数

或对已更改的变量使用闭包的同一筛选函数:

var minprice= 10000;
var minpricefilter= function(p) { return p.price>=minprice };
result= cars.filter(minpricefilter);

minprice= 20000;
result= cars.filter(minpricefilter);
设置过滤器后,如何使用JQuery控件动态更改过滤器

您不必设置过滤器。您可以使用过滤器函数调用
filter()
,然后获取过滤后的数组;您不能更改之后应用于数组的过滤器。相反,您必须再次调用
filter()
,并传递不同的过滤器函数

或对已更改的变量使用闭包的同一筛选函数:

var minprice= 10000;
var minpricefilter= function(p) { return p.price>=minprice };
result= cars.filter(minpricefilter);

minprice= 20000;
result= cars.filter(minpricefilter);

忘记基于回调的筛选。输入jOrder:

通过迭代整个表进行筛选既繁琐又缓慢。使用jOrder,您可以按索引进行搜索:

var table = jOrder(json.cars)
    .index('id', ['car_id'])
    .index('price', ['price'], { grouped: true, ordered: true, type: jOrder.number })
    .index('maker', ['maker_id'], { grouped: true })
    .index('year', ['year_built'], { grouped: true, ordered: true, type: jOrder.number })
    .index('color', ['color_id'], { grouped: true });
然后通过以下方式获得所需的记录:

var filtered = table.where([{ price: { lower: 15000, upper: 40000 } }], { mode: jOrder.range });

请注意,一次只能应用一个不等式过滤器。若要执行更多操作,请使用
filtered
作为另一个jOrder表的输入,只在其上放置必要的索引,然后对该表执行第二个不等式过滤器。依此类推。即使像这样叠加两个过滤器,它仍将比迭代快一个因子大约为10到100,具体取决于表的大小。

忘记基于回调的筛选。输入jOrder:

通过迭代整个表进行筛选既繁琐又缓慢。使用jOrder,您可以按索引进行搜索:

var table = jOrder(json.cars)
    .index('id', ['car_id'])
    .index('price', ['price'], { grouped: true, ordered: true, type: jOrder.number })
    .index('maker', ['maker_id'], { grouped: true })
    .index('year', ['year_built'], { grouped: true, ordered: true, type: jOrder.number })
    .index('color', ['color_id'], { grouped: true });
然后通过以下方式获得所需的记录:

var filtered = table.where([{ price: { lower: 15000, upper: 40000 } }], { mode: jOrder.range });

请注意,一次只能应用一个不等式过滤器。若要执行更多操作,请使用
filtered
作为另一个jOrder表的输入,只在其上放置必要的索引,然后对该表执行第二个不等式过滤器。依此类推。即使像这样叠加两个过滤器,它仍将比迭代快一个因子大约10到100,这取决于您的表的大小。

也许我对JavaScript理解不够,但这到底有什么帮助?这不是简单地执行完全相同的任务,而是现在需要我创建函数吗?也许我对JavaScript理解不够,但这到底有什么帮助?这不是简单地执行完全相同的任务吗任务,但现在需要我创建函数。这是我的解决方案的一种更草率的形式,但看看过滤器推理。这是我的解决方案的一种草率形式,但看看过滤器推理。