我想在数组中的特定位置扩展一个对象,而不必再次发送整个数组。
示例:
从这样的数组开始:
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()突然表现出不同的行为?
我自己的解决方案是创建一个空对象数组,只给出要更改"value“属性的对象,例如:
newNodeData = {sensors: [
{}, {value: 30}
]};既然这看起来很难看,还有什么更好的方法吗?我倾向于保留传感器属性为数组,因为我希望使用forEach快速遍历每个传感器。
编辑:忘了说如果我说了
$.extend(true, node.sensors, newNodeData.sensors);它的工作原理与第一个示例(即,它的工作原理)相同。
发布于 2014-03-29 19:23:06
如果不想更改元素,则可以将其保留为空。
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);https://stackoverflow.com/questions/22735638
复制相似问题