繁体   English   中英

更改对象数组中的一个值

[英]change one value in array of objects

我有对象users数组:

let state = {
  users: [
    {id: 1, name: 'Igor',  selected: false},
    {id: 2, name: 'Anton', selected: false},
    {id: 3, name: 'Vasya', selected: false},
    {id: 4, name: 'Pete',  selected: false},
    {id: 5, name: 'Dan',   selected: false}
  ], ....

和与此对象一起工作的函数:

export function selectUser(userId) {
  if (state.users.find(item => item.id == userId).selected == false) {
    /* some code */

    //[needed] Code to update the user property selected to true

  } else {
    /* some other code */

    //[needed] Code to update the user property selected to true
  }
  emitChange();
}

如何做到这一点,而不会覆盖整个数组,奇怪的是什么都想不起来

find()方法返回要更新的对象。 因此,首先调用它,并将其分配给一个变量,然后测试它是否存在,如果可以,则使用它。

export function selectUser(userId) {
  var user = state.users.find(item => item.id == userId);

  if (user != 'undefined'){
    if (user.selected == false) {
      /* some code */

      user.name = 'New Name';
      // etc

    } else {
      /* some other code */
    }
  }

  emitChange();
}

根据在对与错情况下的评论,这应该起作用:

export function selectUser(userId) {
  var user = state.users.find(item => item.id == userId);
  if (user && user.selected == false) {
    user.selected = true;
  } else {
    /* some other code */
  }
  emitChange();
}

如果要切换属性,则

export function selectUser(userId) {
  var user = state.users.find(user => user.id == userId);
  var isSelected = user.selected; 
  // state.users.forEach(user => user.selected = false ); deselect others 
  user.selected = !isSelected;
  emitChange();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM