首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取对象数组而不是对象数组

获取对象数组而不是对象数组
EN

Stack Overflow用户
提问于 2018-08-22 13:47:51
回答 1查看 62关注 0票数 0

我有两个对象数组(this.so,模型),我试图操作它们来创建一个新的对象数组(this.soModelBOMs)。

我在两个数组上都使用了array.filter().map()。

然而,我得到的是一个数组的对象,而不仅仅是一个对象的数组。

代码语言:javascript
复制
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
            }))
        }))
    }))
)

我得到了像这样的东西:

代码语言:javascript
复制
[
  [
    {
      "production_id": 1,
      "model_id": 1,
      ...
    }
  ],
    {
      "production_id": 2,
      "model_id": 2,
      ...
    }
  [
    {
      "production_id": 3,
      "model_id": 3,
      ...
    }
  ],
]

我如何修复我的代码,这样我就可以将对象推入数组,而不是将对象数组推入数组?

如下所示:

代码语言:javascript
复制
[
    {
      "production_id": 1,
      "model_id": 1,
      ...
    },
    {
      "production_id": 2,
      "model_id": 2,
      ...
    },
    {
      "production_id": 3,
      "model_id": 3,
      ...
    }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 13:56:51

您可以使用find而不是filter

代码语言:javascript
复制
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将您的代码重构为如下所示

代码语言:javascript
复制
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
            }))
        })),
    }
  }
});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51960527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档