Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 如何基于筛选器对象筛选JavaScipArray_Javascript_Arrays_Object_Filter - Fatal编程技术网

Javascript 如何基于筛选器对象筛选JavaScipArray

Javascript 如何基于筛选器对象筛选JavaScipArray,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,根据filter对象,我需要过滤掉数据。下面是具有所需输出的筛选器对象和示例数据。过滤器对象是通过ui中的多搜索组件动态生成的。然后,当用户点击搜索时,需要对数据进行过滤 var filter = { city: 'pana', hospname: 'sara' }; var data = [ { "city": "Hot Springs", "hospname": "St. Vincent Hot

根据filter对象,我需要过滤掉数据。下面是具有所需输出的筛选器对象和示例数据。过滤器对象是通过ui中的多搜索组件动态生成的。然后,当用户点击搜索时,需要对数据进行过滤

var filter = {
  city: 'pana',
  hospname: 'sara'
};
var data = [
  {
    "city": "Hot Springs",
    "hospname": "St. Vincent Hot Springs",
    "version": "VA48A",
    "sysid1": "CT67400",
    "type": "CompressedFile",
    "rowIndex": 0,
    "selected": false,
    "disabled": true
  },
  {
    "city": "Panama City",
    "hospname": "Bay Medical Center",
    "version": "VA48A",
    "sysid1": "CT67399",
    "type": "CompressedFile",
    "rowIndex": 1,
    "selected": false,
    "disabled": true
  },
  {
    "city": "Sarasota",
    "hospname": "Sarasota Memorial Hospital",
    "version": "VA44A",
    "sysid1": "C7393",
    "type": "CompressedFile",
    "rowIndex": 2,
    "selected": false,
    "disabled": true
  },
  {
    "city": "DAVENPORT",
    "hospname": "Genesis Medical Center",
    "version": "VA48A",
    "sysid1": "C6333",
    "type": "CompressedFile",
    "rowIndex": 6,
    "selected": false,
    "disabled": true
  }
];
预期产出:

[{
    "city": "Panama City",
    "hospname": "Bay Medical Center",
    "version": "VA48A",
    "sysid1": "CT67399",
    "type": "CompressedFile",
    "rowIndex": 1,
    "selected": false,
    "disabled": true
  },
  {
    "city": "Sarasota",
    "hospname": "Sarasota Memorial Hospital",
    "version": "VA44A",
    "sysid1": "CT67393",
    "type": "CompressedFile",
    "rowIndex": 2,
    "selected": false,
    "disabled": true
  }]
var过滤器={
城市:“帕纳”,
医院名称:“莎拉”
};
风险值数据=[
{
“城市”:“温泉”,
“hospname”:“圣文森特温泉”,
“版本”:“VA48A”,
“sysid1”:“CT67400”,
“类型”:“压缩文件”,
“行索引”:0,
“选定”:false,
“残疾”:正确
},
{
“城市”:“巴拿马城”,
“医院名称”:“海湾医疗中心”,
“版本”:“VA48A”,
“sysid1”:“CT67399”,
“类型”:“压缩文件”,
“行索引”:1,
“选定”:false,
“残疾”:正确
},
{
“城市”:“萨拉索塔”,
“hospname”:“萨拉索塔纪念医院”,
“版本”:“VA44A”,
“sysid1”:“C7393”,
“类型”:“压缩文件”,
“行索引”:2,
“选定”:false,
“残疾”:正确
},
{
“城市”:“达文波特”,
“hospname”:“Genesis医疗中心”,
“版本”:“VA48A”,
“sysid1”:“C6333”,
“类型”:“压缩文件”,
“行索引”:6,
“选定”:false,
“残疾”:正确
}
];
const result=data.filter(item=>item.city.toLowerCase().includes(filter.city.toLowerCase())| | item.hospname.toLowerCase().includes(filter.hospname.toLowerCase())
console.log(结果)

。作为控制台包装{max height:100%!important;top:0;}
在ES6中,您可以这样做

var results = data.filter(function(item)=>{
   return item.city === filter.city || item.hospname === filter.hospname;
});

快乐编码

我从一个更通用的版本开始,在这个版本中,您可以在filter对象上添加属性。
var过滤器={
城市:“帕纳”,
医院名称:“莎拉”
};
风险值数据=[
{
“城市”:“温泉”,
“hospname”:“圣文森特温泉”,
“版本”:“VA48A”,
“sysid1”:“CT67400”,
“类型”:“压缩文件”,
“行索引”:0,
“选定”:false,
“残疾”:正确
},
{
“城市”:“巴拿马城”,
“医院名称”:“海湾医疗中心”,
“版本”:“VA48A”,
“sysid1”:“CT67399”,
“类型”:“压缩文件”,
“行索引”:1,
“选定”:false,
“残疾”:正确
},
{
“城市”:“萨拉索塔”,
“hospname”:“萨拉索塔纪念医院”,
“版本”:“VA44A”,
“sysid1”:“C7393”,
“类型”:“压缩文件”,
“行索引”:2,
“选定”:false,
“残疾”:正确
},
{
“城市”:“达文波特”,
“hospname”:“Genesis医疗中心”,
“版本”:“VA48A”,
“sysid1”:“C6333”,
“类型”:“压缩文件”,
“行索引”:6,
“选定”:false,
“残疾”:正确
}
];
让结果;
if(Object.keys(filter.length==0)
结果=数据;
否则{
结果=数据。过滤器((项目)=>{
返回Object.keys(过滤器).find(键=>{
返回项[key]&&item[key].toLowerCase().includes(过滤器[key].toLowerCase());
});
});  
}

控制台日志(结果)试着为它写一个函数。@KooiInc好吧,我正在尝试,但无法找到解决方案。下面的函数仅适用于筛选器对象中的单个值。data.filter(函数(项){for(过滤器中的var键){if(项[key].toLowerCase().indexOf(过滤器[key].toLowerCase())==-1){return false;}}return true;});那么,你为什么不在你的问题中包括这一点呢?这会给人更多的线索来回答。可能是关于如何提出好问题的信息。我同意。我将对此进行改进。它是否可以是动态的而不是硬编码筛选对象的值?它不是硬编码的。我使用了
filter
变量。您可以根据您的用例更改变量名称。我知道,但筛选对象在任何给定时间都可能有零个或多个值。亨切克。。让我看看。筛选器对象可能没有值或有一个或多个值。因此,解决方案需要是动态的。当过滤器对象为空时,这不起作用。如果filter对象为空,它必须返回所有数据。然后您只需添加一个If语句并检查
filter
是否具有属性。我已经更新了我的答案。@Nishanth别忘了接受我的答案,如果它解决了你的问题,请投赞成票,这样我就可以释放一些催产素。@marcos,伙计