如何比较对象数组和嵌套对象数组?
how to compare an objects array and a nested objects array?
我只进行了很短的时间编程,我面临着一个难以 understand.I 具有获取对象数组的函数的数据结构,代表添加到购物车的产品。
getAllAddedItems(addedItems) {
this.fullInfoAddedItems.push(addedItems);
const filtered = this.fullInfoAddedItems.reduce((filtered, item) => {
if ( !filtered.some(filteredItem => JSON.stringify(filteredItem) === JSON.stringify(item)) ) {
filtered.push(item);
}
return filtered;
}, []);
this.fullInfoAddedItems = filtered;
}
结果我得到了以下对象数组
[
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3
},
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4
}
]
问题是我需要一个嵌套对象数组中的数据"name"来完成视图信息。
这就是数组的结构
[
{
"name": "Articles funeraires",
"functional_id": "funeral",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Boîte de sympathie",
"id": 27,
"path": "",
"items": [
{
"name": "1 boîte",
"price": 0,
"functional_id": "boite_de_sympathie_1_boite"
}
]
},
{
"file": "data:image/;base64,",
"name": "Coffret empreinte rouge",
"id": 8,
"path": "",
"items": [
{
"name": "Carton de 10 coffrets",
"price": 140,
"functional_id": "carton_de_10_coffrets_2_recharges_argile_offertes_coloris_rouge"
}
]
},
{
"file": "data:image/;base64,",
"name": "AfuBOX",
"id": 10,
"path": "",
"items": [
{
"name" : "PACK N°1 comprenant :",
"price": 30,
"functional_id": "afubox_6_petits_modeles_4_moyens_modeles",
"quantity": 4
},
{
"name" : "PACK N°2 comprenant :",
"price": 70,
"functional_id": "afubox_6_petits_modeles_4_moyens_modeles",
"quantity": 6
}
]
},
{
"file": "data:image/;base64,",
"name": "Catalogue d'urnes décoratives",
"id": 20,
"path": "",
"items": [
{
"price": 0,
"functional_id": "catalogue_urnes_decoratives"
}
]
}
],
"sorting": 2200
},
{
"name": "Documents",
"functional_id": "incineris_doc",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Carnet de conventions",
"id": 17,
"path": "",
"items": [
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3
}
]
},
{
"file": "data:image/;base64,",
"name": "Affiches procédure",
"description": "De prise en charge et de crémation des animaux",
"id": 18,
"path": "",
"items": [
{
"price": 0,
"functional_id": "affiches_procedure_de_prise_en_charge_et_de_cremation_des_animaux"
}
]
},
{
"file": "data:image/;base64,",
"name": "Dépliants services de crémation",
"description": "Pour animaux de compagnie",
"id": 19,
"path": "",
"items": [
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4
}
]
},
{
"file": "data:image/;base64,",
"name": "Catalogue d'urnes décoratives",
"id": 20,
"path": "",
"items": [
{
"price": 0,
"functional_id": "catalogue_urnes_decoratives"
}
]
}
],
"sorting": 2400
},
{
"name": "Matériel crémation",
"functional_id": "furniture",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Sacs blancs",
"description": "Pour les crémations Plurielles",
"id": 11,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_petit_modele_par_25"
},
{
"name": "Moyen modèle",
"description": "Par 20",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_moyen_modele_par_20"
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_grand_modele_par_10"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs bordeaux",
"description": "Pour les crémations Référence",
"id": 12,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_bordeaux_pour_les_cremations_reference_petit_modele_par_10"
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "sacs_bordeaux_pour_les_cremations_reference_grand_modele_par_10"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs verts",
"description": "Pour les crémations Privées",
"id": 13,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_petit_modele_unite"
},
{
"name": "Moyen modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_moyen_modele_unite"
},
{
"name": "Grand modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_grand_modele_unite"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs bleus",
"description": "Pour pièces anatomiques",
"id": 14,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_bleus_pour_pieces_anatomiques_standard_par_25"
}
]
},
{
"file": "data:image/;base64,",
"name": "Etiquettes d'identification",
"id": 15,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 50",
"price": 0,
"functional_id": "etiquettes_identification_et_colliers_de_serrages_standard_par_50"
}
]
},
{
"file": "data:image/;base64,",
"name": "Colliers de serrages",
"id": 16,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 50",
"price": 0,
"functional_id": "distributeurs_pour_sacs_housse_par_5"
}
]
}
],
"sorting": 2300
}
]
[
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3,
"name": "Carnet de conventions"
},
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4,
"name": "Dépliants services de crémation"
}
]
我附加了一个 stacblitz link 模拟我正在尝试做的事情来比较 "functional_id" 从嵌套对象数组中获取 "name" 并推送到第一个数组
https://stackblitz.com/edit/angular-ivy-3wfgme
谁给我一个有效的选项搞定。
提前谢谢你。
我尝试做的是通过第二个数组将原始产品的 "functional_id" 与添加到第一个数组的产品的 "functional_id" 进行比较,这样我就可以提取 "name" 在第一个数组中并将其推入第一个数组
this.market.forEach(function(item: any, i) {
item.products.forEach(function(products: any, i) {
products.items.forEach(function(sale: any, i) {
let saleId = sale.functional_id;
console.log(sale);
console.log(saleId);
});
});
});
这就是我想要做的,但我不知道如何比较这两个数组
for (var j = 0; j <= nestedArray.length - 1; j++) {
for (var k = 0; k <= nestedArray[j]['products'].length - 1; k++) {
for (var i = 0; i <= inputArray.length - 1; i++) {
let pos = nestedArray[j]['products'][k]['items'].map(ele => ele.functional_id).indexOf(inputArray[i]['functional_id']);
if (pos != -1) {
inputArray[i]['name'] = nestedArray[j]['products'][k]['name'];
}
}
}
}
遍历 addedItems
数组,对于此数组中的每个项目,遍历 product
数组中每个对象中的 products
数组,并检查当前是否有任何项目items
数组的 functional_id
等于 addedItems
数组
中当前项目的 functional_id
getAllAddedItems(addedItems) {
addedItems.forEach(item => {
this.product.forEach(({products}) => {
products.forEach(({name, items}) => {
const index = items.findIndex(i => i.functional_id === item.functional_id);
if (index > -1) item.name = name;
})
})
})
console.log(addedItems);
}
这是 stackblitz demo。打开控制台查看函数的输出
我只进行了很短的时间编程,我面临着一个难以 understand.I 具有获取对象数组的函数的数据结构,代表添加到购物车的产品。
getAllAddedItems(addedItems) {
this.fullInfoAddedItems.push(addedItems);
const filtered = this.fullInfoAddedItems.reduce((filtered, item) => {
if ( !filtered.some(filteredItem => JSON.stringify(filteredItem) === JSON.stringify(item)) ) {
filtered.push(item);
}
return filtered;
}, []);
this.fullInfoAddedItems = filtered;
}
结果我得到了以下对象数组
[
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3
},
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4
}
]
问题是我需要一个嵌套对象数组中的数据"name"来完成视图信息。
这就是数组的结构
[
{
"name": "Articles funeraires",
"functional_id": "funeral",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Boîte de sympathie",
"id": 27,
"path": "",
"items": [
{
"name": "1 boîte",
"price": 0,
"functional_id": "boite_de_sympathie_1_boite"
}
]
},
{
"file": "data:image/;base64,",
"name": "Coffret empreinte rouge",
"id": 8,
"path": "",
"items": [
{
"name": "Carton de 10 coffrets",
"price": 140,
"functional_id": "carton_de_10_coffrets_2_recharges_argile_offertes_coloris_rouge"
}
]
},
{
"file": "data:image/;base64,",
"name": "AfuBOX",
"id": 10,
"path": "",
"items": [
{
"name" : "PACK N°1 comprenant :",
"price": 30,
"functional_id": "afubox_6_petits_modeles_4_moyens_modeles",
"quantity": 4
},
{
"name" : "PACK N°2 comprenant :",
"price": 70,
"functional_id": "afubox_6_petits_modeles_4_moyens_modeles",
"quantity": 6
}
]
},
{
"file": "data:image/;base64,",
"name": "Catalogue d'urnes décoratives",
"id": 20,
"path": "",
"items": [
{
"price": 0,
"functional_id": "catalogue_urnes_decoratives"
}
]
}
],
"sorting": 2200
},
{
"name": "Documents",
"functional_id": "incineris_doc",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Carnet de conventions",
"id": 17,
"path": "",
"items": [
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3
}
]
},
{
"file": "data:image/;base64,",
"name": "Affiches procédure",
"description": "De prise en charge et de crémation des animaux",
"id": 18,
"path": "",
"items": [
{
"price": 0,
"functional_id": "affiches_procedure_de_prise_en_charge_et_de_cremation_des_animaux"
}
]
},
{
"file": "data:image/;base64,",
"name": "Dépliants services de crémation",
"description": "Pour animaux de compagnie",
"id": 19,
"path": "",
"items": [
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4
}
]
},
{
"file": "data:image/;base64,",
"name": "Catalogue d'urnes décoratives",
"id": 20,
"path": "",
"items": [
{
"price": 0,
"functional_id": "catalogue_urnes_decoratives"
}
]
}
],
"sorting": 2400
},
{
"name": "Matériel crémation",
"functional_id": "furniture",
"generic": "incineris",
"products": [
{
"file": "data:image/;base64,",
"name": "Sacs blancs",
"description": "Pour les crémations Plurielles",
"id": 11,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_petit_modele_par_25"
},
{
"name": "Moyen modèle",
"description": "Par 20",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_moyen_modele_par_20"
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "sacs_blancs_pour_les_cremations_plurielles_grand_modele_par_10"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs bordeaux",
"description": "Pour les crémations Référence",
"id": 12,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_bordeaux_pour_les_cremations_reference_petit_modele_par_10"
},
{
"name": "Grand modèle",
"description": "Par 10",
"price": 0,
"functional_id": "sacs_bordeaux_pour_les_cremations_reference_grand_modele_par_10"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs verts",
"description": "Pour les crémations Privées",
"id": 13,
"path": "",
"items": [
{
"name": "Petit modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_petit_modele_unite"
},
{
"name": "Moyen modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_moyen_modele_unite"
},
{
"name": "Grand modèle",
"description": "A l'unité",
"price": 0,
"functional_id": "sacs_verts_pour_les_cremations_privees_grand_modele_unite"
}
]
},
{
"file": "data:image/;base64,",
"name": "Sacs bleus",
"description": "Pour pièces anatomiques",
"id": 14,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 25",
"price": 0,
"functional_id": "sacs_bleus_pour_pieces_anatomiques_standard_par_25"
}
]
},
{
"file": "data:image/;base64,",
"name": "Etiquettes d'identification",
"id": 15,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 50",
"price": 0,
"functional_id": "etiquettes_identification_et_colliers_de_serrages_standard_par_50"
}
]
},
{
"file": "data:image/;base64,",
"name": "Colliers de serrages",
"id": 16,
"path": "",
"items": [
{
"name": "Standard",
"description": "Par 50",
"price": 0,
"functional_id": "distributeurs_pour_sacs_housse_par_5"
}
]
}
],
"sorting": 2300
}
]
[
{
"price": 0,
"functional_id": "carnet_de_conventions",
"quantity": 3,
"name": "Carnet de conventions"
},
{
"price": 0,
"functional_id": "depliants_services_incinération",
"quantity": 4,
"name": "Dépliants services de crémation"
}
]
我附加了一个 stacblitz link 模拟我正在尝试做的事情来比较 "functional_id" 从嵌套对象数组中获取 "name" 并推送到第一个数组
https://stackblitz.com/edit/angular-ivy-3wfgme
谁给我一个有效的选项搞定。 提前谢谢你。
我尝试做的是通过第二个数组将原始产品的 "functional_id" 与添加到第一个数组的产品的 "functional_id" 进行比较,这样我就可以提取 "name" 在第一个数组中并将其推入第一个数组
this.market.forEach(function(item: any, i) {
item.products.forEach(function(products: any, i) {
products.items.forEach(function(sale: any, i) {
let saleId = sale.functional_id;
console.log(sale);
console.log(saleId);
});
});
});
这就是我想要做的,但我不知道如何比较这两个数组
for (var j = 0; j <= nestedArray.length - 1; j++) {
for (var k = 0; k <= nestedArray[j]['products'].length - 1; k++) {
for (var i = 0; i <= inputArray.length - 1; i++) {
let pos = nestedArray[j]['products'][k]['items'].map(ele => ele.functional_id).indexOf(inputArray[i]['functional_id']);
if (pos != -1) {
inputArray[i]['name'] = nestedArray[j]['products'][k]['name'];
}
}
}
}
遍历 addedItems
数组,对于此数组中的每个项目,遍历 product
数组中每个对象中的 products
数组,并检查当前是否有任何项目items
数组的 functional_id
等于 addedItems
数组
functional_id
getAllAddedItems(addedItems) {
addedItems.forEach(item => {
this.product.forEach(({products}) => {
products.forEach(({name, items}) => {
const index = items.findIndex(i => i.functional_id === item.functional_id);
if (index > -1) item.name = name;
})
})
})
console.log(addedItems);
}
这是 stackblitz demo。打开控制台查看函数的输出