React Native数组对象筛选未按预期工作



我正在处理react本机项目,我有一个来自后端的数组对象。

这是一个数组的示例。

{
"2010":[
{
"id":1243,
"eventName":"sample_01",
"categoryType":"CUSTOM_NOTES",
"tags":"tag19",
"lastModified":"2022-10-04T14:31:32Z",
"attachments":[

]
}
],
"2022":[
{
"id":1244,
"eventName":"sample_02",
"categoryType":"CUSTOM_NOTES",
"tags":"tag1, tag12, tag3, tag52, tag19",
"lastModified":"2022-10-04T14:31:32Z",
"attachments":[

]
},
{
"id":1245,
"eventName":"hello_03",
"categoryType":"CUSTOM_NOTES",
"tags":"tag1, tag12",
"lastModified":"2022-10-04T14:31:32Z",
"attachments":[

]
}
]
}

在这个数组中,它有一些以前由用户提供的标签(例如:"tags":"tag1, tag12"(。数组对象中可以有多个或单个标记。使用这些标签,用户应该能够过滤数组中的项目。

但我的代码不适用于上述行为,它使用一个标记来过滤元素,该标记最终由用户选择。

请帮我找到答案。提前谢谢。

我的过滤代码如下。

FilterByTagsOrAttachements = (advancedFilterData) => {
let advancedFilterFn = {};
if (advancedFilterData[0].filterType === "Tag") {
for (let advancedItem of advancedFilterData) {
for (const itemTag of advancedItem.data) {
advancedFilterFn = (a) => {
for (let tag of a.tags.split(',')) {
return isEqual(tag, itemTag);
}
};
}
}
} else if (advancedFilterData[1].filterType === "Attachments") {
console.log(JSON.stringify(advancedFilterData[1].data));
}
this.onCreateAdvancedFilterObject(advancedFilterFn);
}
onCreateAdvancedFilterObject = (advancedFilterFn) => {
this.setState(state => {
const events = {};
for (const [year, items] of Object.entries(state.events)) {
events[year] = items.slice().filter(advancedFilterFn);
}
return { events }
})
}

advancedFilterData数组如下。

advancedFilterData => [{"filterType":"Tag","data":["tag1","tag12"]},{"filterType":"Attachments","data":[]}]

我想您需要将所有过滤器存储在一个数组中,然后使用这个数组来检查它是否包括所有元素。此外,由于您有,,您应该使用,进行拆分,除非您在isEqual方法中相应地处理它。

FilterByTagsOrAttachements = (advancedFilterData) => {
let advancedFilterFn = {};
let filterArray = []
if (advancedFilterData[0].filterType === "Tag") {
for (let advancedItem of advancedFilterData) {
filterArray = filterArray.concat(advancedItem.data)
}

advancedFilterFn = (a) => {
for (let tag of a.tags.split(', ')) {
return filterArray.includes(tag);
}
};
} else if (advancedFilterData[1].filterType === "Attachments") {
console.log(JSON.stringify(advancedFilterData[1].data));
}
this.onCreateAdvancedFilterObject(advancedFilterFn);
}

最新更新