Mam dynamiczną tablicę JSON w poniższym formacie,

let main_data = [
   {
      "client":[
         {
            "name":"aaaa",
            "count":"1",
            "filter":{
               "type":{
                  "name":"test3"
               }
            }
         },
         {
            "name":"bbbb",
            "count":"9",
            "filter":{
               "type":{
                  "name":"test2"
               }
            }
         }
      ]
   },
   {
      "compute":[
         {
            "name":"cccc",
            "count":"6",
            "filter":{
               "type":{
                  "name":"test"
               }
            }
         }
      ]
   }
]

Tutaj „nazwa” klucza jest unikalna. Podczas aktualizacji formularza otrzymam tablicę json jak poniżej,

let new_data = [
   {
      "client":[
         {
            "name":"bbbb",
            "count":"1234",
               "type":{
                  "name":"updated_name"
               }
            }
         }
      ]
   }
]

Muszę sprawdzić "nazwę" w tablicy json w "main_data" i usunąć istniejącą i zaktualizować o nowe "updated_data" do "main_data". (proszę nie JQuery)

Oczekiwany wynik,

let main_data = [
   {
      "client":[
         {
            "name":"aaaa",
            "count":"1",
            "filter":{
               "type":{
                  "name":"test3"
               }
            }
         },
         {
            "name":"bbbb",
            "count":"123",
            "filter":{
               "type":{
                  "name":"updated_name"
               }
            }
         }
      ]
   },
   {
      "compute":[
         {
            "name":"cccc",
            "count":"6",
            "filter":{
               "type":{
                  "name":"test"
               }
            }
         }
      ]
   }
]

Czy jest jakiś sposób, aby to osiągnąć. Każda pomoc byłaby bardzo mile widziana. Z góry dziękuję.

3
kalaiyarasi M 1 kwiecień 2020, 12:21

3 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego

let main_data = [{
    client: [{
            name: "aaaa",
            count: "1",
            filter: {
                type: {
                    name: "test3"
                }
            }
        },
        {
            name: "bbbb",
            count: "9",
            filter: {
                type: {
                    name: "test2"
                }
            }
        }
    ]
},
{
    compute: [{
        name: "cccc",
        count: "6",
        filter: {
            type: {
                name: "test"
            }
        }
    }]
}
];
let new_data = [{
client: [{
    name: "bbbb",
    count: "1234",
    filter: {
        type: {
            name: "updated_name"
        }
    }
}]
}];

const res = main_data.map((item, index) => {
if (item.client) {
    const clients = item.client.map(client => {
        if (client.name === new_data[0].client[0].name) {
            client = new_data[0].client[0];
        }
        return client;
    });
    return {
        client: clients
    };
}
return item;
});

console.log(res);
1
vr12 1 kwiecień 2020, 10:30

Może istnieć fantazyjny sposób, aby to zrobić, ale zawsze można po prostu znaleźć pasujący element i go wymienić. na przykład.

   let main_data = [
        {
            "client": [
                {
                    "name": "aaaa",
                    "count": "1",
                    "filter": {
                        "type": {
                            "name": "test3"
                        }
                    }
                },
                {
                    "name": "bbbb",
                    "count": "123",
                    "filter": {
                        "type": {
                            "name": "updated_name"
                        }
                    }
                }
            ]
        },
        {
            "compute": [
                {
                    "name": "cccc",
                    "count": "6",
                    "filter": {
                        "type": {
                            "name": "test"
                        }
                    }
                }
            ]
        }
    ];

    let new_data = [
        {
            "client": [
                {
                    "name": "bbbb",
                    "count": "1234",
                    "type": {
                        "name": "updated_name"
                    }
                }
            ]
        }
    ];

    console.log("before:" + JSON.stringify(main_data));

    newItem = new_data[0]["client"][0];
    mainDataList = main_data[0]["client"];

    for (i = 0; i < mainDataList.length; i++) {
        if (mainDataList[i].name == newItem.name) {
            mainDataList[i] = newItem;
        }
    }
    console.log("after:" + JSON.stringify(main_data));

Wyjdzie

before:[{"client":[{"name":"aaaa","count":"1","filter":{"type":{"name":"test3"}}},{"name":"bbbb","count":"123","filter":{"type":{"name":"updated_name"}}}]},{"compute":[{"name":"cccc","count":"6","filter":{"type":{"name":"test"}}}]}]
after:[{"client":[{"name":"aaaa","count":"1","filter":{"type":{"name":"test3"}}},{"name":"bbbb","count":"1234","type":{"name":"updated_name"}}]},{"compute":[{"name":"cccc","count":"6","filter":{"type":{"name":"test"}}}]}]
0
Alan Wootton 1 kwiecień 2020, 10:54

Oto prosty sposób, aby to zrobić, powiedzmy, że Twoje nowe dane znajdują się w zmiennej newData:

main_data.client.filter(item => item.name === newData.name).push(newData)
-1
Hosein Emrani 1 kwiecień 2020, 09:30