Javascript 嵌套forEach问题
我有两个对象数组,第一个数组(打印机,大约80个元素)由以下类型的对象组成:Javascript 嵌套forEach问题,javascript,ecmascript-6,Javascript,Ecmascript 6,我有两个对象数组,第一个数组(打印机,大约80个元素)由以下类型的对象组成: [{ printerBrand: 'Mutoh', printerModel: 'VJ 1204G', headsBrand: 'Epson', headType: '', compatibilty: [ 'EDX', 'DT8', 'DT8-Pro', 'ECH', ], cartridges: [], },
[{
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你变成了“品牌”?你是说你变成了“品牌名”吗?因为换成“品牌”是错误的