【发布时间】:2022-01-02 03:31:17
【问题描述】:
我正在构建一个nextjs 应用程序。一切正常。但在一个组件中,我面临一个问题。其实我无法理解它的功能。我有一个Array 和Sub-Array。我必须将search 过滤器添加到Array。当匹配一个项目或子项目时,该函数将返回。但是看不懂。。
这里是代码。
这个id数据-
export default [
{
name: "Top Wear",
sub: [
{ name: "T-Shirts" },
{ name: "Casual Shirts" }
]
}
{
name: "Western Wear",
sub: [
{ name: "Dresses" },
{ name: "Jumpsuits" }
]
},
{ name: "Plus Size" },
{ name: "Sunglasses and Frames" },
{
name: "Footwear",
sub: [
{ name: "Casual Shoes" },
{ name: "Sports Shoes" }
]
},
{
name: "Lingerie & Sleepwear",
sub: [
{ name: "Bra" },
{ name: "Briefs" }
]
},
{
name: "Sports & Active Wear",
sub: [
{ name: "Sports Shoes" },
{ name: "Sports Sandals" },
{ name: "Active T-Shirts" },
{ name: "Active T-Shirts" },
]
},
{
name: "Gadgets",
sub: [
{ name: "Smart Wearables" },
{ name: "Fitness Gadgets" }
]
},
{ name: "Bag & Backpacks" },
{ name: "Luggages & Trolleys " }
]
这里我想添加直接匹配name 或sub.name 的搜索功能。我不明白如何编写函数。如果只有一个 Array 没有 Sub-Array..
此代码是第一个Array 而不是Sub-Array
import { useState, useEffect } from "react";
//Data
import CategoriesData from "Data/Header/SearchBar.data";
const Categories = ({ setFilterData, filterData }) => {
const [categories, setCategories] = useState(CategoriesData);
const [input, setInput] = useState("");
useEffect(() => {
if (input.length > 0) {
const mathches = CategoriesData.filter(item => {
const escapeRegExp = (str) => str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
const regex = new RegExp(escapeRegExp(input), "gi");
return item.name.match(regex);
})
setCategories(mathches);
} else {
setCategories(CategoriesData);
}
}, [CategoriesData, input]);
return (
<Box>
<Box>
<InputBase
value={input}
onChange={(e) => setInput(e.target.value)}
/>
</Box>
<List>
{categories &&
categories.map((category, i) => (
<Box key={i}>
<ListItem>
<ButtonBase>
<Typography>
{category.name}
</Typography>
</ButtonBase>
</ListItem>
{category.sub &&
category.sub.map((subCategory, i) => (
<ListItem key={i}>
<ButtonBase>
<Typography>
{subCategory.name}
</Typography>
</ButtonBase>
</ListItem>
))
}
</Box>
))
}
</List>
</Box>
);
};
export default Categories;
请帮帮我..
【问题讨论】:
-
是否要维护
{ name: ..., sub: [ ... ] }结构?
标签: javascript arrays reactjs filter