简体   繁体   English

如何根据过滤器过滤javasciptarray object

[英]How to filter javasciptarray based on a filter object

Based on the filter object, I need to filter out the data.基于过滤器object,我需要过滤掉数据。 Below is the filter object and sample data with required output. The filter object is generated dynamically via a multi search component from ui.下面是过滤器 object 和所需的示例数据 output。过滤器 object 是通过 ui 的多搜索组件动态生成的。 Then when the user hits search the data needs to be filtered.然后,当用户点击搜索时,需要过滤数据。

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

Expected output:预计 output:

[{
    "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 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 } ]; const result=data.filter(item=>item.city.toLowerCase().includes(filter.city.toLowerCase()) || item.hospname.toLowerCase().includes(filter.hospname.toLowerCase()) ) console.log(result)
 .as-console-wrapper { max-height: 100%;important: top; 0; }

In ES6 you can do it like this在 ES6 中你可以这样做

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

Happy coding!编码愉快!

I started on a more generic version where you can add attributes on the filter object.我从一个更通用的版本开始,您可以在过滤器 object 上添加属性。

 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 } ]; let results; if (Object.keys(filter).length === 0) results = data; else { results = data.filter((item) => { return Object.keys(filter).find(key => { return item[key] && item[key].toLowerCase().includes(filter[key].toLowerCase()); }); }); } console.log(results);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM