Tak*_*ebo 1 javascript ecmascript-6 reactjs
我正在尝试通过标签过滤列表:
const initialState = [
{id:1 ,name: 'Product A', image: 'pic-001.jpg', tags: ['nature', 'camping', 'outdoor']},
{id:2 ,name: 'Product B', image: 'pic-002.jpg', tags: ['winter', 'hiking', 'camping', 'snow']},
{id:3 ,name: 'Product C', image: 'pic-003.jpg', tags: ['vacation', 'family', 'kids', 'river', 'lake', 'fishing']}
]
Run Code Online (Sandbox Code Playgroud)
我可以使用和来按名称过滤列表,我的问题是当我尝试按标签列出产品时。我必须在产品过滤器内使用吗?还有另一种方法吗?mapfilterforeach
sja*_*han 11
像那样?
const filter = 'nature';
const filteredResult = initialState.filter((item) => {
return (item.tags.indexOf(filter) >= 0);
});
Run Code Online (Sandbox Code Playgroud)
您可以创建一组选定的标签,并用于Array#some检查该集中的至少一个标签是否存在于对象的标签列表中:
const initialState = [
{id:1 ,name: 'Product A', image: 'pic-001.jpg', tags: ['nature', 'camping', 'outdoor']},
{id:2 ,name: 'Product B', image: 'pic-002.jpg', tags: ['winter', 'hiking', 'camping', 'snow']},
{id:3 ,name: 'Product C', image: 'pic-003.jpg', tags: ['vacation', 'family', 'kids', 'river', 'lake', 'fishing']}
];
const filterByTags = ['nature', 'family'];
const filterByTagSet = new Set(filterByTags);
const result = initialState.filter((o) =>
o.tags.some((tag) => filterByTagSet.has(tag))
);
console.log(result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4643 次 |
| 最近记录: |