Javascript 嵌套forEach问题

Javascript 嵌套forEach问题,javascript,ecmascript-6,Javascript,Ecmascript 6,我有两个对象数组,第一个数组(打印机,大约80个元素)由以下类型的对象组成: [{ printerBrand: 'Mutoh', printerModel: 'VJ 1204G', headsBrand: 'Epson', headType: '', compatibilty: [ 'EDX', 'DT8', 'DT8-Pro', 'ECH', ], cartridges: [], },

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

[{
    printerBrand: 'Mutoh',
    printerModel: 'VJ 1204G',
    headsBrand: 'Epson',
    headType: '',
    compatibilty: [
      'EDX',
      'DT8',
      'DT8-Pro',
      'ECH',
    ],
    cartridges: [],
  },
   ....
]
[
        {
            "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"
        },
  ...
]
第二个阵列(cardridges,约500个元素)由以下类型的对象组成:

[{
    printerBrand: 'Mutoh',
    printerModel: 'VJ 1204G',
    headsBrand: 'Epson',
    headType: '',
    compatibilty: [
      'EDX',
      'DT8',
      'DT8-Pro',
      'ECH',
    ],
    cartridges: [],
  },
   ....
]
[
        {
            "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对象添加到此打印机的cardridge数组中。我已经试过了,但不知何故,迭代没有正确进行。这就是我所尝试的:

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);
            }

        });
      });
    });

我做错了什么

您访问了错误的属性。它应该是
cartridge.customData.brandName.value.content
,请仔细注意
brandName.value
,而不是
brand.value

。您的问题是您使用了错误的属性访问它-
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);
  }));
});

打印机内部。兼容性.forEach
没有
cardridges
墨盒。customData
不包含键
品牌
。。。因此,我希望您在开发人员工具控制台中得到一个错误。是吗?@GerardoFurtado-这是一个单独的数组:p(我也爱上了它)@JaromandaX是的,现在我明白了。。。嗯,我认为这不是最好的名称选择。我不建议在调试时使用箭头功能。如果你要使用ES6ishness,你可能会使用
for.of
,而不是
forEach
。我改成了brand,问题仍然存在persists@Anto你变成了“品牌”?你是说你变成了“品牌名”吗?因为换成“品牌”是错误的