我有两个对象数组,第一个数组(打印机,大约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);
}
});
});
});
我做错了什么?
答案 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);
}));
});