如何解决从JavaScript的过滤器对象中删除空白数组
我实际上是在基于React.js框架的React Native上工作。因此,我在这里尝试创建一个对象,该对象具有多个数组中的所有过滤器参数。 例如。
//This is not my Filter Object.
//A state object in React Native is where you define your variables.
state = {
holder: [],//Holds temp data which will be filled with filtered items
allData: [],//Holds data of all the items
//My filter parameters
location: "",category: [],offers: [],}
为了便于理解,我为您填写了过滤器参数:location: "England"
,category: ["Mens","Womens"]
和offers: ["20%","40%","60%"]
如果这3个过滤条件都分配了值,这就是我的数组的样子。现在,这是我为数组申请的过滤器功能:
filterProducts = () => {
//Packing all of my filter conditions in one Filter Object
let query = {
filter1: this.state.location,filter2: this.state.category,filter3: this.state.offers,}
//Filter Logic on my Holder Array
const filteredData = this.state.allData.filter(function (item) {
return Object.entries(query).every(([key,value]) =>
value.includes(item[key])
);
});
console.log("Result: Filtered Array",filteredData);
this.setState({ holder: filteredData });
}
为了便于理解,我的query
对象看起来像:
let query = {
filter1: "England",filter2: ["Mens","Womens"],filter3: ["20%","30%","40%"],}
那么,现在我的问题是什么?仅当我的过滤器对象query
看起来像上面时,过滤器逻辑才起作用。也就是说,如果所有3个过滤器参数都分配了一些值。
如果我的过滤器对象[]
变成这样,我的过滤器逻辑就会中断并返回一个query
数组:
let query = {
filter1: "England",filter3: [],//Blank array inside object because user didn't pick any values
}
所以我对大家的问题是:
- 如何从对象中删除空白数组?
- 有没有办法更改我的过滤器逻辑,如果它的数组为空,它将跳过filter3?意思是不从我的过滤器对象中删除空白数组,而是仅使用分配了一些值的参数来过滤该数组?
解决方法
我认为类似的事情应该起作用。
您可以使用Object.keys
遍历您的值并根据条件附加到新对象。
您可以检查example here
const onlyData = {}
Object.keys(query).forEach(filterKey => {
const filterValue = query[filterKey];
if (filterValue.length) onlyData[filterKey] = filterValue;
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。