首先获取所有标签并从初始状态中过滤重复的标签。将该数组保存到uniqueTags中。
然后将uniqueTags与initialState名称进行比较,以创建另一个包含对象及其属性tags和products的productTags数组。
const initialState = [
{id:1 ,name: 'Product A', image: 'pic-001.jpg', tags: ['nature', 'camping', 'winter', 'outdoor']},
{id:2 ,name: 'Product B', image: 'pic-002.jpg', tags: ['winter', 'hiking', 'family', 'camping', 'snow']},
{id:3 ,name: 'Product C', image: 'pic-003.jpg', tags: ['vacation', 'family', 'kids', 'river', 'lake', 'fishing']}
]
let allTags = [];
initialState.map((t)=>t.tags).forEach((a)=>a.forEach((b)=>allTags.push(b)))
let uniqueTags = allTags.filter((a,i,arr)=>arr.indexOf(a,i+1)===-1)
productTags = [];
uniqueTags.forEach((u)=>{
initialState.forEach((t)=>{
if(t.tags.includes(u))
productTags.push({'tag': u, 'product':t.name});
})
})
console.log(JSON.stringify(productTags));
(后来编辑)更正:
为了形成正确的对象,我已将代码更改为:
const initialState = [
{id:1 ,name: 'Product A', image: 'pic-001.jpg', tags: ['nature', 'camping', 'winter', 'outdoor']},
{id:2 ,name: 'Product B', image: 'pic-002.jpg', tags: ['winter', 'hiking', 'family', 'camping', 'snow']},
{id:3 ,name: 'Product C', image: 'pic-003.jpg', tags: ['vacation', 'family', 'kids', 'river', 'lake', 'fishing']}
]
let allTags = [];
initialState.map((t)=>t.tags).forEach((a)=>a.forEach((b)=>allTags.push(b)))
let uniqueTags = allTags.filter((a,i,arr)=>!arr.includes(a,i+1))
productTags = [];
uniqueTags.forEach((u)=>{
let productName = [];
initialState.forEach((t)=>{
if(t.tags.includes(u))
productName.push(t.name);
})
productTags.push({tag:u, products:productName});
})
console.log(JSON.stringify(productTags));