【问题标题】:What's the JavaScript way of updating an array of objects from another array? [duplicate]从另一个数组更新对象数组的 JavaScript 方法是什么? [复制]
【发布时间】:2017-03-08 03:49:32
【问题描述】:

我有一个叫做探针的对象。它有一个称为传感器的属性,它是一个数组。

var probe = {
    sensors = [
        { id: 1, checked: false },
        { id: 2, checked: true },
        { id: 3, checked: false },
        ... //more sensors
    ],
    ... //other properties
}

我有一个单独的数组,其中包含更新的传感器列表,如下所示。

var updatedSensors = [
    { id: 1, checked: true },
    { id: 3, checked: true }
];

我想根据 updatedSensors 中的值更新探测对象中的传感器数组。我该怎么做?

这可以通过使用几个 for 循环轻松实现。但是 for 循环并不是 JavaScript 中迭代的最佳方式,所以我想知道如何以首选方式进行此操作。

编辑:

updatedSensors 中的对象是 probe.sensors 中对象的子集。换句话说,updatedSensors 没有probe.sensors 中的所有对象(id),但是probe.sensors 具有updatedSensors 中的所有对象(ids)。

谢谢。

【问题讨论】:

  • ids 是唯一的吗?如果是这样,我会将其中一个数组转换为 id->checked 的哈希值以节省一些循环
  • 如果这是sensors = { 1:false, 2:true, 3:false },您只需使用Object.assign
  • @4castle 是的,这会起作用,但阵列中的传感器 objs 也有其他属性。 id 和 checked 只是两个属性。
  • @CodingWithSpike 是的,键是唯一的。我不知道翻译成哈希是什么意思,但会查一下。

标签: javascript arrays


【解决方案1】:

试试这段代码:

probe.sensors.map(function (sensor) {
     // Loop through updated sensors & match sensor.id so we can reassign val
     updatedSensors.map(function (f) {
           if (f.id == sensor.id) {
               sensor.checked = f.checked
           }
     })
     return sensor;
})

【讨论】:

  • 太慢了。 Can be better if you index by id。而且你不应该使用map
  • 是的。我刚刚在我的检查员@Oriol
  • 这不会用updatedSensors中的objs覆盖probe.sensors中的传感器objs吗?我不想那样。我只想更新probe.sensors中每个obj的checked属性。
  • 没有。现在它只会将 sensor.checked 字段更新为 updatedSensor 对象中的值
  • 是的,现在可以了:)
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2023-03-20
  • 2021-10-22
相关资源
最近更新 更多