更新数组中一个对象的值

sky*_*dev 5 javascript arrays for-loop ionic-framework angular

我正在尝试更新数组中的一个值。基本上我想更新数组中一个对象的状态值。这是我的数组

[
  {
    "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
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

这是我的尝试,但它更新了数组中的所有内容。参数 1 是项目名称 - 看看我是否在正确的项目上

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 );

}
Run Code Online (Sandbox Code Playgroud)

所以澄清这是我想要实现的目标。假设用户执行项目 3 的存档函数,则数组需要如下所示(项目 3 的状态已更新,但项目 1 和 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
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

Edd*_*die 3

如果你想更新statusfor projectname=== parameter1,你可以

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);
Run Code Online (Sandbox Code Playgroud)