我有两个对象数组,第一个数组(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 = '';
}
});
});
我做错了什么?
你这样做
items.items.forEach(...)
你不应该这样做吗
items.forEach(...)
?
我建议用空字符串初始化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;
}
});
});