首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将IndexedDB数据迁移到JS中的数组

将IndexedDB数据迁移到JS中的数组
EN

Stack Overflow用户
提问于 2021-03-29 06:05:11
回答 1查看 122关注 0票数 0

我是web开发的新手,目前正在尝试用vue.js和dexie.js开发一个“离线”应用程序。Dexie.js允许在现代浏览器上更容易地访问索引数据库。

然而,我认为我的问题更多的是在基本的javascript方面。

我得到了这个基本的DB(“增强的”与Dexie):

代码语言:javascript
运行
复制
var db = new Dexie("appDatabase");
db.version(1).stores({
   tasks: '++id,name, agi, str, vit, int',
   player: 'id, name, agi, str, vit, int',
});

(是,只允许一个玩家)

..and编辑和向indexedDB中添加数据工作得非常好……现在,我正在尝试将数据从IndexedDB传输到一个数组,以便在Vue.js中更容易地显示(我选择noneOf是因为我不介意播放器将名称留空)。

代码语言:javascript
运行
复制
        transferDBtoArray() {
            db.tasks.where('name').noneOf().toArray(function(result) {
                for(var i= 0; i< result.length; i++) {
                    app.tasks[i].id = result[i].id;
                    app.tasks[i].name = result[i].name;
                    app.tasks[i].str = result[i].str;
                    app.tasks[i].int = result[i].int;
                    app.tasks[i].vit = result[i].vit;
                    app.tasks[i].agi = result[i].agi;
                    
                }
            });

当这是我在vue应用中的数组结构时:

代码语言:javascript
运行
复制
        tasks : [
            {id: 0, name:"", str: 0, agi: 0, int: 0, vit: 0}
        ],

不幸的是,它不会像预期的那样工作:

代码语言:javascript
运行
复制
Unhandled rejection: TypeError: Cannot set property 'name' of undefined

我知道从数据库访问数据工作得很好:

代码语言:javascript
运行
复制
        test() {
            db.tasks.where('name').noneOf().toArray(function(result) {
                for(var i= 0; i< result.length; i++) {
                    console.log( result[i].name);
                    console.log( result[i].agi);
                    console.log( result[i].str);
                    console.log( result[i].int);
                    console.log( result[i].vit);
                }
            });
        },
代码语言:javascript
运行
复制
js.js:136 hüpfen
js.js:137 10
js.js:138 2
js.js:139 5
js.js:140 10
js.js:136 instagrammen
js.js:137 10
js.js:138 10
js.js:139 10
js.js:140 10
js.js:136 lollen
js.js:137 1
js.js:138 1
js.js:139 1
js.js:140 1
js.js:136 rennen
js.js:137 5
js.js:138 3
js.js:139 2
js.js:140 

我猜我的错误是在数组的结构中,但我不确定..

如有任何帮助,将不胜感激,并致以亲切的敬意。

理查德

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 06:48:30

您需要在循环中每个赋值的开头将app.tasks[i]设置为空对象:

代码语言:javascript
运行
复制
    transferDBtoArray() {
        db.tasks.where('name').noneOf().toArray(function(result) {
            for(var i= 0; i< result.length; i++) {
                app.tasks[i] = {};
                app.tasks[i].id = result[i].id;
                app.tasks[i].name = result[i].name;
                app.tasks[i].str = result[i].str;
                app.tasks[i].int = result[i].int;
                app.tasks[i].vit = result[i].vit;
                app.tasks[i].agi = result[i].agi;
                
            }
        });

或者更好:

代码语言:javascript
运行
复制
transferDBtoArray() {
  db.tasks.where('name').noneOf().toArray(results => results.map(result => ({          
        id: result.id,
        name: result.name,
        str: result.str,
        int: result.int,
        vit: result.vit,
        agi: result.agi,
  })));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66846650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档