2014-03-29 27 views
0

我想擴展一個對象在數組中的特定位置,而不必再次發送整個數組。

例子:

您與陣列像這樣開始了:

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

看看http://stackoverflow.com/questions/13280232/modifying-jquery-extend-to-push-array-items-within-objects-but-extend-other-obje – friedi

+0

如果我正確理解版本,我應該給一些額外的屬性(如sensor_id),然後代碼將決定合併該數組,我是否正確? – weeknie

回答

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); 
+0

該方法需要多少額外內存?只是爲了提高效率 – weeknie