firestore错误:“不支持嵌套数组”。 Firestore / p5.js问题

有人可以帮助我更好地理解此错误吗?我试图使用p5.js和firebase / firestore创建一个站点,您可以在画布上绘制一些东西,然后将图形保存到firestore,但是当我单击save时,出现此错误:

  

error.ts:166未捕获的FirebaseError:函数DocumentReference.set()用无效数据调用。不支持嵌套数组

到目前为止,我的代码:
var drawing = [];
var currentPath = [];
var isDrawing = false;

function setup() {
    canvas = createCanvas(400,400);
    canvas.mousepressed(startPath);
    canvas.parent('canvas');
    canvas.mouseReleased(endPath);
    var saveButton = select('#saveButton');
    saveButton.mousepressed(saveDrawing);
}

function startPath() {
    isDrawing = true;
    currentPath = [];
    drawing.push(currentPath);
}

function endPath() {
    isDrawing = false;
}

function draw() {
    background(0);

    if (isDrawing){
        var point = {
        x: mouseX,y: mouseY
        }
    currentPath.push(point);
    }

    stroke(255);
    strokeWeight(7);
    noFill();
    for (var i = 0; i < drawing.length; i++) {
        var path = drawing[i];
        beginShape();
        for (var k = 0; k < path.length; k++) {
            vertex(path[k].x,path[k].y)
        }
        endShape();
    }
}

function saveDrawing(){
    db.collection('joonistused').add({
        drawing: drawing
    });
    var result = ref.push(data,dataSent);
    console.log(result.key)

    function dataSent(status) {
        console.log(status);
    }
}

edit:如何将图形坐标存储到Firestore中?像将绘图保存到Firestore中一样?

sdwdwz 回答:firestore错误:“不支持嵌套数组”。 Firestore / p5.js问题

实际上,drawing是一个数组,其中直接项目也是数组。由于某些技术限制,Firebase似乎不允许具有数组数组。

similar question on StackOverflow的答案表明您仍然可以间接拥有数组数组,如Troy Michael所述:

  

您可以调整序列化功能,该功能将具有对象类型的数组转换为映射。键可以是数字以保持顺序。

     

即{1:对象,2:2:对象2 ...}

     

反序列化时,您可以获得Object.values(data);将其放回数组以供客户端使用。

您可以这样做,或者只是将子数组嵌套到对象中,其中drawing[ { items: [ ... items of array ...] },... ]类似。现在注意drawing是一个对象数组,其中每个对象都有一个名为items的字段,该字段是一个项目数组。根据引用的问题,似乎可以解决该限制。

本文链接:https://www.f2er.com/3166904.html

大家都在问