J'essaie de mettre à jour une valeur dans un tableau. Fondamentalement, je veux mettre à jour la valeur d'état d'un objet dans un tableau. Voici mon tableau

[
  {
    "projects": {
      "projectname": "one",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "two",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "three",
      "dateadded": "16 April 2018, 7:32AM",
      "status": 1
    }
  }
]

Voici ma tentative, mais elle met à jour tout dans le tableau. Le paramètre 1 est le nom du projet - pour voir si je suis sur le bon projet

archive(){

    var parameter1 = this.navParams.get('param1');

    this.storage.get('projectsStore').then(data => {

      for (var i = 0; i < data.length; i++) {
        if (data[i].projects.projectname == parameter1) {
          this.project = [{ "projectname":data[i].projects.projectname, "dateadded":data[i].projects.dateadded, "location":data[i].projects.location, "status":0 }];
        }
      }

    });

    this.storage.set( 'projectsStore', this.project );

}

Donc, pour clarifier c'est ce que je veux réaliser. Supposons que l'utilisateur exécute la fonction d'archivage pour le projet trois, puis le tableau doit ressembler à ceci (l'état est mis à jour pour le projet 3 mais pas pour les projets 1 et 2)

[
  {
    "projects": {
      "projectname": "one",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "two",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "three",
      "dateadded": "16 April 2018, 7:32AM",
      "status": 0
    }
  }
]
3
skydev 16 avril 2018 à 08:40

3 réponses

Meilleure réponse

Si vous souhaitez mettre à jour le status pour projectname === parameter1, vous pouvez simplement

var parameter1 = 'three';

var data = [{
    "projects": {
      "projectname": "one",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "two",
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "projects": {
      "projectname": "three",
      "dateadded": "16 April 2018, 7:32AM",
      "status": 1
    }
  }
];

data.forEach(v => {
  //Test if projectname  == parameter1. If it is update status
  if (v.projects.projectname === parameter1) v.projects.status = 0;
});

console.log(data);
3
Eddie 16 avril 2018 à 06:01

Essaye ça

function updateProject(projectName){
    let toBeUpdated = projects.find(item => item.projects.projectname === projectName);
    toBeUpdated && (toBeUpdated.projects.status = 0);
}
0
prabhatojha 16 avril 2018 à 06:11

À mon humble avis, vous devez modifier votre schéma JSON. Être un tableau d'objets est bien, mais garder les "projets" comme clé ne me semble pas logique. Au lieu de cela, vous pouvez avoir le nom du projet comme clé de l'objet JSON du projet. Ça devrait ressembler a quelque chose comme ca:

[
  {
    "one": {
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "two": {
      "dateadded": "16 April 2018, 7:23AM",
      "status": 1
    }
  },
  {
    "three": {
      "dateadded": "16 April 2018, 7:32AM",
      "status": 1
    }
  }
]

Cette structure vous permettra de mettre à jour facilement l'état de n'importe quel projet. Une fois que vous avez cette structure, vous pouvez simplement mettre à jour le statut d'un seul projet en utilisant cette fonction ci-dessous:

 this.storage.get('projectsStore').then(data => {
   data[parameter1].status = 0;
});
0
Prasheel 16 avril 2018 à 06:30