[英]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.