我想擴展一個對象在數組中的特定位置,而不必再次發送整個數組。
例子:
您與陣列像這樣開始了:
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);
它的工作原理相同,在第一個例子(即它的工作原理)
看看http://stackoverflow.com/questions/13280232/modifying-jquery-extend-to-push-array-items-within-objects-but-extend-other-obje – friedi
如果我正確理解版本,我應該給一些額外的屬性(如sensor_id),然後代碼將決定合併該數組,我是否正確? – weeknie