2017-07-04 63 views
1

我正在使用Dexie IndexedDB封裝,我試圖添加一個對象到嵌套對象中的現有數組。結構看起來類似於下面Dexie:如何添加到嵌套對象中的數組

{ 
    Name : 'John', 
    age : 33, 
    tags : { 
    skill: [{ 
     first: '.NET', 
     second: 'JAVA', 
     third: [{special1:'sleep'},{special2:'eat'}] 
    }] 
    } 
} 

我已經嘗試了很多方法來推對象special3:'跑'skill.third但沒有成功。我最後一次嘗試看起來是這樣的

const pathObject = {}; 
    const fullPath = 'result.tags.skill[3].third'; 
    pathObject[fullPath] = {special3:'run'}; 
    db.inspections.update(id, pathObject); 

的對象添加之外,而不是數組中的「第三」類似下面

{ 
    Name : 'John', 
    age : 33, 
    tags : { 
    skill: [{ 
     first: '.NET', 
     second: 'JAVA', 
     third: [{special1:'sleep'},{special2:'eat'}] 
    }] 
    skill[3]: { 
     third: {special3:'run'} 
    } 
    } 
} 

我想知道是否有一種方法來添加到陣列中如果不是使用Dexie嵌套對象是否有辦法實現這一點使用indexeddb。幫助是讚賞,因爲問題已經阻礙了進步

回答

3

最簡單的就是使用Collection.modify()的回調函數突變模型:

db.inspections.where('id').equals(id).modify(x => 
    x.tags.skill[0].third.push({special3:'run'})); 

如果你想使用包含數組項的keyPath ,因爲陣列可以看作帶有數字鍵的對象,所以也是可能的:

db.inspections.update(id, {"tags.skill.0.third.3": {special3:'run'}});