无法通过2d迭代更新元素数组

时间:2018-04-19 14:04:47

标签: javascript ecmascript-6

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

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

第二个数组(项目,大约500个元素)由以下类型的对象组成:

[
        {
            "customData": {
                "brand": {
                    "value": {
                        "type": "string",
                        "content": "hp"
                    },
                    "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"
        },
  ...
]

我想做的是通过第二个数组进行迭代,如果项目名称的一部分(即DT8)包含在第一个数组的数组'兼容性'的元素中,我想从第一个数组的元素包含一个新属性:printerBrand。我试过但不知何故,迭代没有正确进行。这就是我试过的:

items.forEach((item) => {
      printerChart.forEach((printer) => {
        if (printer.compatibilty.some(compatibleElem => (
          item.name.includes(compatibleElem)))) {
          item.printerBrand = printer.printerBrand;
        } else {
          item.printerBrand = '';
        }
      });
    });

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你做

items.items.forEach(...)

你不应该这样做吗

items.forEach(...)

答案 1 :(得分:0)

我建议使用空字符串初始化item.printerBrand并使用some的嵌套方法获取品牌并退出循环(如果找到)。

即使有要分配的品牌,这也可以防止获得空字符串。

items.forEach((item) => {
    item.printerBrand = '';
    printerChart.some(printer => {
        if (printer.compatibilty.some(compatibleElem => item.name.includes(compatibleElem))) {
            item.printerBrand = printer.printerBrand;
            return true;
        }
    });
});