【问题标题】:Update multiple object in an array更新数组中的多个对象
【发布时间】:2017-10-24 14:46:28
【问题描述】:

我想使用 typescript 批量更新数组。

我是通过使用 for 循环来做到的。

this.versions = [{ id: 1, VersionName: 'test1' }, { id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }, { id: 4, VersionName: 'test4' }];
this.selectedVersions = [{ id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }];
for (let i = 0; i < this.selectedVersions.length; i++) {
  this.versions = this._configuration.updateEveryObjectsByKey(this.versions, this.selectedVersions[i], "Id");
}

updateEveryObjectsByKey(listOfdata: any, data: any, key: string) {
  listOfdata = listOfdata.map(function (item) {
    return item[key] == data[key] ? data : item;
  })
  return listOfdata;
}

但我不喜欢使用 for 循环。那么让我知道如何使用 typescript 对数组进行批量更新?

【问题讨论】:

  • the question you asked 25 minutes ago 呢?它有 7 个答案。
  • 这与使用findIndex或filter多次删除有关。但是通过使用地图或其他方式进行多次更新。所以我问了单独的问题。
  • 好吧,够公平
  • 您当前的代码实际上并没有修改原始对象。相反,它将用来自selectedVersions 的新对象完全替换原始对象。这是您想要保留的功能吗?
  • 更新和替换有很大区别,比如你有{ id: 0, a: 2, b: 3 }。使用{ id: 0, a: 3 } 更新将导致{ id: 0, a: 3, b: 3 } 而替换将导致{ id: 0, a: 3 }

标签: javascript arrays angular typescript


【解决方案1】:

你可以使用ES6的Object.assignarray.findarray.map

var versions = [{ id: 1, VersionName: 'test1' }, { id: 2, VersionName: 'test2' }, { id: 3, VersionName: 'test3' }, { id: 4, VersionName: 'test4' }];
var selectedVersions = [{ id: 2, VersionName: 'test2 update' }, { id: 3, VersionName: 'test3' }];
var key = "id";
versions = versions.map(el => {
  var found = selectedVersions.find(s => s[key] === el[key]);
  if (found) {
      el = Object.assign(el, found);
  }
  return el;
});
console.log(versions);

【讨论】:

  • 在此解决方案中,用于比较的密钥被硬编码为id,而 OP 在当前代码中动态设置它。
  • @BeetleJuice 到底在输入什么。我想通过使用密钥而不是 id 来实现。因为我会将这种方法用作常用方法。 :)
  • 所以我想我需要将s.id === el.id 更改为s[key] === el[key]??
【解决方案2】:

对潜在复杂问题的简单解决方案。

           $scope.model.ticketsArr.forEach(function (Ticket) {
                if (Ticket.AppointmentType == 'CRASH_TECH_SUPPORT') {
                    Ticket.AppointmentType = '360_SUPPORT'

                }
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多