J'ai ci-dessous JSON Array et j'essaie d'ajouter un nouvel objet à l'un des éléments du tableau, mais le problème auquel je suis confronté est:
Si je pousse un nouvel objet pour un tableau array1 à l'index 0 de arrayHolder alors tous les éléments array1 sont mis à jour avec un nouvel objet.

{
  "arrayHolder": [
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    }
 ]
}

J'utilise le code ci-dessous pour pousser vers array1:

var jsonStr = "{\"arrayHolder\":[{\"array1\": [],\"....."; // Json String
var jsonObj = JSON.parse(jsonStr); // String To object 

var newObj = {"value": 1}; // New object that I want to push 
jsonObj.arrayHolder[0].array1.push(newObj);

// Even below code has same output
jsonObj.arrayHolder[0]["array1"][0] = newObj;

J'obtiens en dessous de la sortie:

{
  "arrayHolder": [
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    }
 ]
}

Je veux mettre à jour la valeur de array1 uniquement pour l'élément 0th du tableau arrayHolder pas pour tous les éléments array1 du tableau principal.

0
User7723337 31 mai 2020 à 17:18

3 réponses

Meilleure réponse

Le problème est avec le support de tableau, il semble que le détenteur de tableau utilise le même objet, et ainsi le modifier à un seul endroit entraînera la répercussion du changement à tous les endroits.

1
ehab 31 mai 2020 à 14:21

Essayer:

jsonObj.['arrayHolder'][0]['array1'].push(newObj);
0
double-beep 31 mai 2020 à 14:46

Veuillez essayer cette solution, @ehab vous a expliqué pourquoi votre solution ne fonctionne pas, vous utilisez le même objet pour compléter l'objet x et comme vous le savez, l'objet et le tableau sont de type Ref en Javascript

var x={
  "arrayHolder": [
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    }
 ]
}
 var jsonStr =JSON.stringify(x)// Json String
var jsonObj = JSON.parse(jsonStr); // String To object 
debugger
var newObj = {"value": 1}; // New object that I want to push 
jsonObj.arrayHolder[0].array1.push(newObj);

result=JSON.stringify(jsonObj)
console.log("result:"+result)

résultat: {"arrayHolder": [{"array1": [{"value": 1}], "array2": [], "array3": [], "array4": []}, {"array1": [], "tableau2": [], "tableau3": [], "tableau4": []}, {"tableau1": [], "tableau2": [], "tableau3": [], "tableau4" : []}, {"tableau1": [], "tableau2": [], "tableau3": [], "tableau4": []}]}

0
Jadli 31 mai 2020 à 14:41