嵌套forEach问题

时间:2018-04-19 23:38:38

标签: javascript ecmascript-6

我有两个对象数组,第一个数组(打印机,大约80个元素)由以下类型的对象组成:

[{
    printerBrand: 'Mutoh',
    printerModel: 'VJ 1204G',
    headsBrand: 'Epson',
    headType: '',
    compatibilty: [
      'EDX',
      'DT8',
      'DT8-Pro',
      'ECH',
    ],
    cartridges: [],
  },
   ....
]

第二个阵列(卡片,大约500个元素)由以下类型的对象组成:

[
        {
            "customData": {
                "brand": {
                    "value": {
                        "type": "string",
                        "content": "ECH"
                    },
                    "key": "brand"
                },
                "printer": {
                    "value": {
                        "type": "string",
                        "content": "c4280"
                    },
                    "key": "printer"
                }
            },
            "name": "DT8 XLXL",
            "image": {
                "id": "zLaDHrgbarhFSnXAK",
                "url": "https://xxxxxxx.net/images/xxxxxx.jpg"
            },
            "brandId": "xxxxx",
            "companyId": "xxxx",
            "createdAt": "2018-03-26T14:39:47.326Z",
            "updatedAt": "2018-04-09T14:31:38.169Z",
            "points": 60,
            "id": "dq2Zezwm4nHr8FhEN"
        },
  ...
]

我首先要做的是迭代第一个数组,然后迭代所有可用的cardridge:如果一个cardridge的值customData.brand.value包含在数组的'兼容性'中打印机,然后我必须将此cardridge对象添加到此打印机的cardridges数组中。我试过但不知何故,迭代没有正确进行。这就是我试过的:

printers.forEach((printerItem) => {
      const printer = printerItem;
      printer.compatibilty.forEach((compatibilityItem) => {
        const compatibility = compatibilityItem;
        cardridges.forEach((cartridge) => {
          if (compatibility === cartridge.customData.brand.value.content) {
              printer.cartridges.push(cartridge);
            }

        });
      });
    });

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你正在访问错误的财产。它应该是cartridge.customData.brandName.value.content,请仔细注意brandName.value而不是brand.value

答案 1 :(得分:0)

您的问题是,您是通过错误的媒体资源访问的 - brand而不是brandName。 此外,如果你的目标是除了IE之外的所有内容,你可以简化你的嵌套for循环,以利用一些花哨的ES6数组方法。

printers.forEach((p) => {
  p.cartridges.push(cartridges.filter((c) => {
    const brandName = c.customData.brandName.value.content;
    return p.compatibilty.includes(brandName);
  }));
});