簡體   English   中英

如何比較對象數組和嵌套對象數組?

[英]how to compare an objects array and a nested objects array?

我只進行了很短的編程時間,我面臨着一個難以理解的數據結構。我有一個 function,其中我得到了一個對象數組,代表添加到購物車中的產品。

  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": "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 鏈接,模擬我正在嘗試通過“functional_id”進行比較以從嵌套對象數組中獲取“name”並推送到第一個數組

https://stackblitz.com/edit/angular-ivy-3wfgme

有人給我一個有效的選擇來得到它。 先感謝您。

我嘗試做的是通過第二個數組 go 將原始產品的“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);

      });

      });
    });

這就是我想要做的,但我不知道如何比較這兩個 arrays

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數組並針對此數組中的每個項目,遍歷products數組中每個 object 中的product數組,並檢查當前items數組中的任何項是否具有等於addedItems數組中當前項的functional_idfunctional_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 演示 打開控制台可以看到function的output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM