什么';从另一个数组更新对象数组的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是,键是唯一的。我不知道翻译成散列是什么意思,但我会查一下。请检查(使用lodashunionBy
)太慢。而且你不应该使用map
.True。我刚刚在inspector@Oriol中快速创建了它。这不会用updatedSensors中的objs覆盖probe.sensors中的传感器objs吗?我不想那样。我只想更新probe.sensors.No中每个obj的checked属性。现在它将只将sensor.checked字段更新为updatedSensor对象中的值是的,现在它将:)