Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lodash Js使用数组和对象创建树结构_Javascript_Node.js_Reactjs_Typescript_Lodash - Fatal编程技术网

Javascript Lodash Js使用数组和对象创建树结构

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

我正在尝试创建一个类似Lodash树的数组和对象。我有两个数组(像category和products)和一个公共密钥。需要使用字符串索引形成树结构

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是的,您是正确的。更新答案。您可以筛选产品