假设我有以下对象数组,让我们将其命名为itemArray;

{
  "totalItems": 2,
  "items": [
    {
      "id": 1,
      "name": "foo"

    },
    {
      "id": 2,
      "name": "bar"
    },
    ]
}

我有一个订阅,只返回id 2的更新结果.如何更新对象数组而不在整个数组中循环?

我想要的是下面的例子;

updateUser(user){
    this.myservice.getUpdate(user.id)
    .subscribe(newitem => {
      this.updateArray(newitem);
    });
}

  updateArray(newitem){
    this.itemArray.items[newitem.id].name = newitem.name
  }

或者更好,替换整个对象;

  updateArray(newitem){
    this.itemArray.items[newitem.id] = newitem
  }

然而,本例根据数组的索引更新array.那么我该如何根据newitem进行更新呢.身份证件

comments 中要求的模板:

<tr *ngFor="let u of itemsArray.items; let i = index">
  <td>{{ u.id }}</td>
  <td>{{ u.name }}</td>
  <td>
    <input type="checkbox" checked="u.accepted" [(ngModel)]="itemsArray.items[i].accepted" (ngModelChange)="updateUser(u)">
    <label for="singleCheckbox-{{i}}"></label>
  </td>
</tr>

推荐答案

我根据你的例子创建了这个Plunker,它将对象更新为newItem.身份证件

以下是我的函数片段:

showUpdatedItem(newItem){
    let updateItem = this.itemArray.items.find(this.findIndexToUpdate, newItem.id);

    let index = this.itemArray.items.indexOf(updateItem);


    this.itemArray.items[index] = newItem;

  }

  findIndexToUpdate(newItem) { 
        return newItem.id === this;
  }

希望这有帮助.

Typescript相关问答推荐

如何声明循环数组类型?

之间是否有区别:例如useEffect()React.useEffect()

如何为ViewContainerRef加载的Angular组件实现CanDeactivate保护?

如何在TypeScript对象迭代中根据键推断值类型?

忽略和K的定义

为什么typescript要把这个空合并转换成三元?

使某些类型的字段变为可选字段'

类型脚本中没有接口的中间静态类

如何按不能保证的功能过滤按键?

如何在Angular 12中创建DisplayBlock组件?

通过按键数组拾取对象的关键点

如何将对象数组中的键映射到另一种对象类型的键?

判断映射类型内的键值的条件类型

是否可以强制静态方法将同一类型的对象返回其自己的类?

如何定义这样一个TypeScript泛型,遍历路由配置树并累积路径

推断集合访问器类型

在打印脚本中将对象类型转换为数组

有没有更干净的方法来更新**key of T**的值?

可以用任意类型实例化,该类型可能与

是否可以将类型参数约束为不具有属性?