【问题标题】:Dexie : How to add to array in nested objectDexie:如何添加到嵌套对象中的数组
【发布时间】:2017-12-08 00:51:30
【问题描述】:

我正在使用 Dexie IndexedDB 包装器,并且正在尝试将对象添加到嵌套对象内的现有数组中。结构如下图所示

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

我尝试了很多方法来将对象 special3:'run' 推送到 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 来实现这一点。感谢您的帮助,因为问题阻碍了进展

【问题讨论】:

    标签: javascript indexeddb dexie


    【解决方案1】:

    最简单的方法是使用 Collection.modify() 和回调函数来改变你的模型:

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

    如果您想使用包含数组项的键路径,也是可以的,因为数组可以被视为带有数字键的对象:

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

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多