Доступ к значениям вложенных объектов внутри массива при использовании map для перебора массива объектов - PullRequest
0 голосов
/ 31 марта 2020

Мой массив состоит из нескольких объектов, таких как:

 {
        "id": 2,
        "nom_operation": "opSavCreationTest2",
        "num_serie": "1203250cd81b2101",
        "address_mac": "04:15:d9:00:00:49",
        "description": "opSavCreationTest2",
        "adminId": 82,
        "produitId": 1,
        "clientId": 2,
        "status": "produit_recu",
        "lieu_achat_produit": "opSavCreationTest2",
        "garanti_au": "07-02-2021",
        "createdAt": "2020-03-27T15:15:55.207Z",
        "updatedAt": "2020-03-27T15:15:55.207Z",
        "produit": {
            "id": 1,
            "nom_produit": "PURE BLACK MAT",
            "type_produit": "Pure",
            "couleur_produit": "black_mat",
            "nbr_op_sav_en_cours": 7,
            "img": "img",
            "createdAt": "2020-03-30T08:41:39.597Z",
            "updatedAt": "2020-03-30T15:37:09.294Z"
        },
        "client": {
            "id": 2,
            "nomClient": "opSavCreationTest2",
            "numTel": "5775757575",
            "email": "opSavCreationTest2",
            "addresse": "opSavCreationTest2",
            "ville": "opSavCreationTest2",
            "pays": "opSavCreationTest2",
            "createdAt": "2020-03-27T15:15:55.043Z",
            "updatedAt": "2020-03-27T15:15:55.043Z"
        },
        "admin": {
            "id": 82,
            "nom": "administrateur",
            "email": "aeaffeef@gmail.com",
            "mot_de_passe": "efefr3lnr8Fr4IwEsc=",
            "last_login": null,
            "role": "administrateur",
            "createdAt": "2020-03-23T09:08:43.585Z",
            "updatedAt": "2020-03-23T09:08:43.585Z"
        }
    }

Что-то странное происходит, когда я пытаюсь получить доступ к значениям во вложенном объекте produit путем итерации по массиву с map

this.state.operationSavInformation.map(
                      (operationSavInformation, i) => {
                        const operationSavLink = `/home/operationSav/${operationSavInformation.id}`;
                        console.log("operationSavInformation ", i);
                        console.log("operationSavInformation.produit"); // Works
                        console.log(operationSavInformation.produit);
                        /** LOGS THIS:
                         *
                         * id: 1
                         *  nom_produit: "PURE BLACK MAT"
                         * type_produit: "Pure"
                         * couleur_produit: "black_mat"
                         * nbr_op_sav_en_cours: 7
                         * img: "img"
                         * createdAt: "2020-03-30T08:41:39.597Z"
                         * updatedAt: "2020-03-30T15:37:09.294Z"
                         */

                        console.log(
                          operationSavInformation.produit["nom_produit"]
                        ); //ERROR

                        /**TypeError: Cannot read property 'nom_produit' of undefined */

Когда я пытаюсь получить доступ к значению свойства 'nom_produit' продукта, я получаю эту ошибку:

TypeError: Cannot read property ' nom_produit 'of undefined

Несмотря на то, что я успешно зарегистрировал вложенный объект produit !!

 console.log("operationSavInformation.produit"); // Works
                            console.log(operationSavInformation.produit);
                            /** LOGS THIS:
                             *
                             * id: 1
                             *  nom_produit: "PURE BLACK MAT"
                             * type_produit: "Pure"
                             * couleur_produit: "black_mat"
                             * nbr_op_sav_en_cours: 7
                             * img: "img"
                             * createdAt: "2020-03-30T08:41:39.597Z"
                             * updatedAt: "2020-03-30T15:37:09.294Z"
                             */

Я действительно не мог найти объяснение для этот странный результат. Если производственный объект зарегистрирован успешно, почему он считается неопределенным, когда я пытаюсь получить доступ к одному из его свойств?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Это абсолютно нелепо. Я добавил if else, и неожиданно все заработало:

this.state.operationSavInformation.map(
            (operationSavInformation, i) => {
                const operationSavLink = `/home/operationSav/${operationSavInformation.id}`;
                console.log("operationSavInformation ", i);
                console.log("operationSavInformation.produit"); // Works
                console.log(operationSavInformation.produit);
                const produit = operationSavInformation.produit;
                console.log(
                  "produit = operationSavInformation.produit;"
                );
                console.log(produit);
                if (produit !== undefined) {
                  // This gets executed despite the error without if else says that produit is undefined!!
                  console.log("produit is not undefined");
                  console.log(produit.nom_produit);
                } else {
                  // This doesn't get executed despite the error without the if else is that it cannot read nom_produit of undefined
                  console.log("produit is undefined");
                }}

Если я удалю это условие, я все равно получу : «неопределенная ошибка» , но условие проверяет, что это не неопределенно, и это работает!

0 голосов
/ 31 марта 2020

По журналу, который вы показываете:

** LOGS THIS:
*
* id: 1
*  nom_produit: "PURE BLACK MAT"     // " nom_produit" should be right
* type_produit: "Pure"

Я полагаю, вы пропустили пробел этого атрибута, попробуйте

console.log(operationSavInformation.produit[" nom_produit"])

const test = {
        "id": 2,
        "nom_operation": "opSavCreationTest2",
        "num_serie": "1203250cd81b2101",
        "address_mac": "04:15:d9:00:00:49",
        "description": "opSavCreationTest2",
        "adminId": 82,
        "produitId": 1,
        "clientId": 2,
        "status": "produit_recu",
        "lieu_achat_produit": "opSavCreationTest2",
        "garanti_au": "07-02-2021",
        "createdAt": "2020-03-27T15:15:55.207Z",
        "updatedAt": "2020-03-27T15:15:55.207Z",
        "produit": {
            "id": 1,
            " nom_produit": "PURE BLACK MAT",  //You should check this attribute, is it " nom_produit" or "nom_produit"
            "type_produit": "Pure",
            "couleur_produit": "black_mat",
            "nbr_op_sav_en_cours": 7,
            "img": "img",
            "createdAt": "2020-03-30T08:41:39.597Z",
            "updatedAt": "2020-03-30T15:37:09.294Z"
        },
        "client": {
            "id": 2,
            "nomClient": "opSavCreationTest2",
            "numTel": "5775757575",
            "email": "opSavCreationTest2",
            "addresse": "opSavCreationTest2",
            "ville": "opSavCreationTest2",
            "pays": "opSavCreationTest2",
            "createdAt": "2020-03-27T15:15:55.043Z",
            "updatedAt": "2020-03-27T15:15:55.043Z"
        },
        "admin": {
            "id": 82,
            "nom": "administrateur",
            "email": "aeaffeef@gmail.com",
            "mot_de_passe": "efefr3lnr8Fr4IwEsc=",
            "last_login": null,
            "role": "administrateur",
            "createdAt": "2020-03-23T09:08:43.585Z",
            "updatedAt": "2020-03-23T09:08:43.585Z"
        }
    }

console.log(test.produit[" nom_produit"])
console.log(test.produit["nom_produit"])
...