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