我有两个对象数组(this.so,模型),我试图操作它们来创建一个新的对象数组(this.soModelBOMs)。
我在两个数组上都使用了array.filter().map()。
然而,我得到的是一个数组的对象,而不仅仅是一个对象的数组。
this.soModelBOMs = this.so.filter(x => x.lacking > 0).map(so =>
model.filter(x => x.model_no == so.model_no).map(m => ({
production_id: so.production_id,
model_id: m.model_id,
model_no: m.model_no,
process_rev: m.process_rev,
bom_rev: m.bom_rev,
process: m.process.map(p => ({
process_order: p.process_order,
process_name: p.process_name,
process_no: p.process_no,
process_yield: p.process_yield,
bom: p.bom.map(b => ({
alt: b.alt,
bom_item: b.bom_item,
bom_name: b.bom_name,
bom_code: b.bom_code,
bom_qty: b.bom_qty,
bom_stock: b.bom_stock,
bom_yield: b.bom_yield,
bom_req: b.bom_qty * so.lacking
}))
}))
}))
)我得到了像这样的东西:
[
[
{
"production_id": 1,
"model_id": 1,
...
}
],
{
"production_id": 2,
"model_id": 2,
...
}
[
{
"production_id": 3,
"model_id": 3,
...
}
],
]我如何修复我的代码,这样我就可以将对象推入数组,而不是将对象数组推入数组?
如下所示:
[
{
"production_id": 1,
"model_id": 1,
...
},
{
"production_id": 2,
"model_id": 2,
...
},
{
"production_id": 3,
"model_id": 3,
...
}
]发布于 2018-08-22 13:56:51
您可以使用find而不是filter。
this.soModelBOMs = this.so.filter(x => x.lacking > 0).map(so => {
var m = model.find(x => x.model_no == so.model_no);
if(m) {
return {
production_id: so.production_id,
model_id: m.model_id,
model_no: m.model_no,
process_rev: m.process_rev,
bom_rev: m.bom_rev,
process: m.process.map(p => ({
process_order: p.process_order,
process_name: p.process_name,
process_no: p.process_no,
process_yield: p.process_yield,
bom: p.bom.map(b => ({
alt: b.alt,
bom_item: b.bom_item,
bom_name: b.bom_name,
bom_code: b.bom_code,
bom_qty: b.bom_qty,
bom_stock: b.bom_stock,
bom_yield: b.bom_yield,
bom_req: b.bom_qty * so.lacking
}))
}))
};
}
})不过,我并没有测试这段代码。
附言:
您可以使用spread operator将您的代码重构为如下所示
this.soModelBOMs = this.so.filter(x => x.lacking > 0).map(so => {
var m = model.find(x => x.model_no == so.model_no);
if (m) {
return {
...so,
...m,
process: m.process.map(p =>
({
...p,
bom: p.bom.map(b =>
({ ...b,
bom_req: b.bom_qty * so.lacking
}))
})),
}
}
});
https://stackoverflow.com/questions/51960527
复制相似问题