2016-01-09 113 views
1

如何向此結構中的每個數組元素添加唯一ID?元素的數量是可變的,所以我需要一個動態的解決方案。MongoDB/Meteor:爲每個數組元素添加唯一ID

{ 
    "_id" : "wLXDvjDvbsxzfxabR", 
    "group" : [ 
     { 
      "title" : "title 1", 
      "data" : [ 
       { 
        "note" : "text" 
       } 
      ] 
     }, 
     { 
      "title" : "title 2", 
      "data" : [ 
       { 
        "note 1" : "text" 
       }, 
       { 
        "note 2" : "text" 
       }, 
       { 
        "note 3" : "text" 
       } 
      ] 
     } 
    ] 
} 

該ID應添加到所有組元素和所有數據元素。結果應該是這樣的:

{ 
    "_id" : "wLXDvjDvbsxzfxabR", 
    "group" : [ 
     { 
      "id" : "dfDFSfdsFDSfdsFws", 
      "title" : "title 1", 
      "data" : [ 
       { 
        "id" : "efBDEWVvfdvsvsdvs", 
        "note" : "text" 
       } 
      ] 
     }, 
     { 
      "id" : "fdsfsFDSFdsfFdsFd", 
      "title" : "title 2", 
      "data" : [ 
       { 
        "id" : "WVvfsvVFSDWVDSVsv", 
        "note 1" : "text" 
       }, 
       { 
        "id" : "qqdWSdksFVfSVSSCD", 
        "note 2" : "text" 
       }, 
       { 
        "id" : "MZgsdgtscdvdsRsds", 
        "note 3" : "text" 
       } 
      ] 
     } 
    ] 
} 
+0

你試過只是通過'group'陣列循環,分配'id'值到每個元素? – sfletche

回答

2

這應該通過對象迭代

function generateId() { 
    // you'll have to write this yourself 
} 

function addId(obj) { 
    if (Object.prototype.toString.call(obj).indexOf('Array') >= 0) { 
     obj.forEach(function(item) { 
      item.id = item.id || generateId(); 
      addId(item); 
     }); 
    } 
    else if (typeof obj == 'object') { 
     Object.keys(obj).forEach(function(key) { 
      addId(obj[key]); 
     }); 
    } 
} 

使用

addId(yourObject); 
+0

我猜'genid()'應該是'generateId()',對不對? – user3142695

+0

絕對不是......'genid'是'addId'函數中的參數名稱 - 你可以在不引用'genid'的情況下執行它(在參數中刪除它)並在addId函數中使用generateId - 但是,我寫了這與考慮到靈活性...我會更簡單地重寫它 –

+0

那裏 - 更簡單,更容易混淆 –

相關問題