Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';从另一个数组更新对象数组的JavaScript方法是什么?_Javascript_Arrays - Fatal编程技术网

什么';从另一个数组更新对象数组的JavaScript方法是什么?

什么';从另一个数组更新对象数组的JavaScript方法是什么?,javascript,arrays,Javascript,Arrays,我有一个叫做探测器的物体。它有一个称为传感器的属性,它是一个数组 var probe = { sensors = [ { id: 1, checked: false }, { id: 2, checked: true }, { id: 3, checked: false }, ... //more sensors ], ... //other properties } 我有一个单独的阵列,它有一个更新的传感

我有一个叫做探测器的物体。它有一个称为传感器的属性,它是一个数组

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中的值更新probe对象中的传感器阵列。我该怎么做

这可以通过使用两个for循环轻松实现。但是for循环在JavaScript中并不是很好的迭代方式,所以我想知道如何以首选的方式进行迭代

编辑:

updatedSensors中的对象是probe.sensors中对象的子集。换言之,updatedSensors不具有probe.sensors中的所有对象(ID),但probe.sensors具有updatedSensors中的所有对象(ID)

谢谢。

试试下面的代码:

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

id
s是否唯一?如果是这样,我会将其中一个数组转换为
id
->
checked
的散列,以保存一些循环,如果这是
sensors={1:false,2:true,3:false}
,您只需要使用它。@4castle是的,这会起作用,但数组中的sensor objs还有其他属性。id和checked只是两个属性。@CodingWithSpike是,键是唯一的。我不知道翻译成散列是什么意思,但我会查一下。请检查(使用lodash
unionBy
)太慢。而且你不应该使用
map
.True。我刚刚在inspector@Oriol中快速创建了它。这不会用updatedSensors中的objs覆盖probe.sensors中的传感器objs吗?我不想那样。我只想更新probe.sensors.No中每个obj的checked属性。现在它将只将sensor.checked字段更新为updatedSensor对象中的值是的,现在它将:)