2013-04-22 259 views
0

如何將數組添加到另一個數組的對象中?JS/jQuery將數組合併到另一個數組的對象中

我有以下的數組:

projectSave = ({ id: 1, name: 'Foo', desc: 'Bar', boards: {}, hotspots {} });

欲填充熱點對象與來自單獨的陣列數據。

allBoards = {id: 'b1, name: 'Board 1'; id: 'b2, name: 'Board 2'}
allHotspots = {id: 'h1, type: 'link'; id: 'h2, type: 'link'}

我怎麼能數據填充到一個數組的對象?

非常感謝!

+0

如果答案已經解決了您的問題,請務必對其進行投票並接受它。 – Yatrix 2013-04-22 16:52:17

回答

-1

你試過

projectSave.boards= allBoards; 
projectSave.hotspots=allHotspots; 
+0

哇,花了一個小時試圖使它與.push或.concat一起工作......感謝很多快速回復,它工作正常。 – 2013-04-22 16:12:17

+0

除非我弄錯了,否則這樣做並不會在您的對象中創建數組的副本,而是創建該數組的引用。你不想這樣做。 – Yatrix 2013-04-22 16:17:12

+0

如果你想避免複製的問題,可能會由於不願意改變成對象可以實現與...可以實現...原始問題沒有說任何關於複製它... projectSave.boards = allBoards; projectSave.hotspots = allHotspots;然後allBoards = null; allHotspots = NULL; – 2013-04-22 16:20:15

1

首先,allBoards應該是:被視爲對象

allBoards = [{id: 'b1, name: 'Board 1'}, {id: 'b2, name: 'Board 2'}]; 

一切之間{}。在[]裏面是什麼使它成爲這些對象的數組。這使它成爲對象數組[]。 allHotSpots應該以相同的方式完成。

您必須遍歷數組並重新創建projectSave的對象,並將它們添加到boardshotspots陣列。

for (var i = 0; i<allBoards.length; i++){ 
    projectSave.boards.push({id: allBoards[i].id, 
       name: allBoards[i].name}); 

} 
for (var i = 0; i<allHotspots .length; i++){ 
    projectSave.hotspots .push({id: allHotspots [i].id, 
       type: allHotspots [i].type}); 
} 

如果你只是嘗試設置projectSave.boards = allBoards,你只是存儲的參考,而不是一個數組的副本。如果這是你經常做的事情,你可能會更好地創建一個克隆方法。

+0

如果allboards和allHotpots的長度始終相同,則可以在單個循環中完成此操作。 – Yatrix 2013-04-22 16:19:28

0

我不禁注意到你在代碼中有語法錯誤,字符串沒有正確關閉,分號用作數組分隔符而不是逗號,一些屬性應該是數組而不是對象(我假設那是你的意圖),所以我也糾正了它們。

既然你也把它標記爲jQuery,並且萬一你的對象變得越來越複雜,這裏有一個jQuery的方式來做到這一點。

var projectSave = { id: 1, name: 'Foo', desc: 'Bar', boards: [], hotspots: [] }; 

var allBoards = [{id: 'b1', name: 'Board 1'}, {id: 'b2', name: 'Board 2'}]; 

var allHotspots = [{id: 'h1', type: 'link'}, {id: 'h2', type: 'link'}]; 


$.extend(true, projectSave, { 
    boards: allBoards, 
    hotspots: allHotspots 
}); 

// Test 
console.info(projectSave);