Javascript Lodash Js使用数组和对象创建树结构
我正在尝试创建一个类似Lodash树的数组和对象。我有两个数组(像category和products)和一个公共密钥。需要使用字符串索引形成树结构Javascript Lodash Js使用数组和对象创建树结构,javascript,node.js,reactjs,typescript,lodash,Javascript,Node.js,Reactjs,Typescript,Lodash,我正在尝试创建一个类似Lodash树的数组和对象。我有两个数组(像category和products)和一个公共密钥。需要使用字符串索引形成树结构 let categories = [{ id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f', category: 'category c227', },{ id: 'b21a0b57-2a2b-3750-c227-8776cedf707a', category: 'categor
let categories = [{
id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
category: 'category c227',
},{
id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
category: 'category 81aa',
}
];
let products = [{
mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName: 'product 1 c227',
}, {
mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName: 'product 2 c227',
}, {
mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 1 81aa',
}, {
mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 2 81aa',
},{
mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 3 81aa',
}];
需要类似的结构
[
{
"category": { id, category},
"products ": [
{ mId, pName },
{ mId, pName },
{ mId, pName }
]
},{
"category": { id, category},
"products ": [
{ mId, pName },
{ mId, pName },
{ mId, pName }
]
},
]
我试着得到相应类别的产品。但需要帮助才能遵循上述结构
let arrResult = _.map(categories, function(s) {
console.log(s);
return _.filter(products, function(i) {
return _.isEqual(s.id, i.mId);
});
});
console.log(arrResult);
结果是:
{ id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
category: 'category c227' }
{ id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
category: 'category 81aa' }
[ [ { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 1 81aa' },
{ mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 2 81aa' },
{ mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName: 'product 3 81aa' } ],
[ { mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName: 'product 1 c227' },
{ mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName: 'product 2 c227' } ] ]
如果要按id对产品进行分组,可以尝试此方法。希望这有帮助
let类别=[{
id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
类别:“c227类”,
},{
id:'b21a0b57-2a2b-3750-c227-8776cedf707a',
类别:“81aa类”,
}
];
让产品=[{
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品1 c227’,
}, {
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品2 c227’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:“产品1 81aa”,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品2 81aa’,
},{
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品3 81aa’,
}];
const combine=(类别、产品)=>
categories.map((categority)=>{
const result=products.filter((val)=>val.mId==category.id);
返回{类别,产品:结果};
});
console.log(合并(类别、产品))代码>如果要按id对产品进行分组,可以尝试此操作。希望这有帮助
let类别=[{
id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
类别:“c227类”,
},{
id:'b21a0b57-2a2b-3750-c227-8776cedf707a',
类别:“81aa类”,
}
];
让产品=[{
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品1 c227’,
}, {
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品2 c227’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:“产品1 81aa”,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品2 81aa’,
},{
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品3 81aa’,
}];
const combine=(类别、产品)=>
categories.map((categority)=>{
const result=products.filter((val)=>val.mId==category.id);
返回{类别,产品:结果};
});
console.log(合并(类别、产品))
您需要将category对象包装到键category
这段代码应该适合您
let类别=[{
id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
类别:“c227类”,
}, {
id:'b21a0b57-2a2b-3750-c227-8776cedf707a',
类别:“81aa类”,
}];
让产品=[{
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品1 c227’,
}, {
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品2 c227’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:“产品1 81aa”,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品2 81aa’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品3 81aa’,
}];
const yourTree=categories.map(cat=>{
返回{
类别:{
id:cat.id,
类别:类别
},
products:products.filter(product=>product.mId===cat.id)
};
});
console.log(yourTree)
您需要将category对象包装到键category
这段代码应该适合您
let类别=[{
id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
类别:“c227类”,
}, {
id:'b21a0b57-2a2b-3750-c227-8776cedf707a',
类别:“81aa类”,
}];
让产品=[{
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品1 c227’,
}, {
mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',
pName:‘产品2 c227’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:“产品1 81aa”,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品2 81aa’,
}, {
mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
pName:‘产品3 81aa’,
}];
const yourTree=categories.map(cat=>{
返回{
类别:{
id:cat.id,
类别:类别
},
products:products.filter(product=>product.mId===cat.id)
};
});
console.log(yourTree)代码>ES6中的这一问题可以用简洁的方式解决,并且:
let categories=[{id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',category:'category c227',},{id:'b21a0b57-2a2b-3750-c227-8776cedf707a',category:'category 81aa',}];
让产品=[{mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',pName:'product 1 c227',},{mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',pName:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',pName:'product 1 81aa',},{mId:'c3c70dff-bbdf-8701-81aa-D60DADFF',,'pName:',{mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',pName:'product 3 81aa',}];
const result=categories.map(category=>
({category,products:products.filter(y=>y.mId==category.id)}))
console.log(result)
ES6中的这个问题可以用简洁的方式解决,并且:
let categories=[{id:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',category:'category c227',},{id:'b21a0b57-2a2b-3750-c227-8776cedf707a',category:'category 81aa',}];
让产品=[{mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',pName:'product 1 c227',},{mId:'b21a0b57-2a2b-3750-c227-8776cedf707a',pName:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',pName:'product 1 81aa',},{mId:'c3c70dff-bbdf-8701-81aa-D60DADFF',,'pName:',{mId:'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',pName:'product 3 81aa',}];
const result=categories.map(category=>
({category,products:products.filter(y=>y.mId==category.id)}))
console.log(result)
您可以直接筛选产品。reduce
在这里似乎是一项开销。@dinespandyan是的,您是正确的。更新答案。您可以筛选产品