我想在数组中的特定位置扩展一个对象,而不必再次发送整个数组。
示例:
你从这个数组开始:
sensors = [{value: 10}, {value: 20}];
现在说我要更改第二个传感器的值,我可以在jQuery中执行此操作:
newSensorValue = {1: {value:30}};
$.extend(true, sensors, newSensorValue);
// sensors = [{value: 10}, {value: 30}];
但是,如果数组不是直接合并的对象,则不起作用:
node = {x: 10, y: 10, node_id: 1, sensors: [
{sensor_id: 1, value: 10},
{sensor_id: 2, value: 20}
]};
newNodeData = {sensors: {
1: {value:30}
}};
$.extend(true, node, newNodeData);
// node = {x: 10, y: 10, node_id: 1, sensors: {
// 1: {value:30}
// }};
如果数组嵌套在对象中,为什么$ .extend()突然表现不同?
我自己的解决方案是创建一个空对象数组,只给出我想要更改"值"的对象。属性,如:
newNodeData = {sensors: [
{}, {value: 30}
]};
由于这看起来相当丑陋,有没有更好的方法呢? 我更喜欢将传感器属性保持为数组,因为我喜欢使用forEach快速浏览每个传感器。
编辑:忘记提及我是否$.extend(true, node.sensors, newNodeData.sensors);
它的工作方式与第一个例子相同(即工作正常)
答案 0 :(得分:0)
当您不想更改元素时,可以将元素留空。
node = {x: 10, y: 10, node_id: 1, sensors: [
{sensor_id: 1, value: 10},
{sensor_id: 2, value: 20}
]};
newNodeData = {sensors: [,{value:30}]};
$.extend(true, node, newNodeData);