Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何停止将对象转换为数组?_Javascript_Arrays_Rethinkdb - Fatal编程技术网

Javascript 如何停止将对象转换为数组?

Javascript 如何停止将对象转换为数组?,javascript,arrays,rethinkdb,Javascript,Arrays,Rethinkdb,我在这里很困惑。我正在传递一个名为ScheduleAdd的对象,并使用insertAt将该对象输入到名为“schedules”的数组中,该数组存在于表“teachers”中的每个文档中。重新思考抛出的错误插入值必须是OBJECT Get数组。它向我显示了一个数组,该数组由传递的对象组成,周围有方括号 代码: 例如,我可能会传递对象: { schedule: 'weekend', visible: 'yes' } console.log确认对象的格式正确。然而,重新思考将抛出错误: 'Inser

我在这里很困惑。我正在传递一个名为ScheduleAdd的对象,并使用insertAt将该对象输入到名为“schedules”的数组中,该数组存在于表“teachers”中的每个文档中。重新思考抛出的错误插入值必须是OBJECT Get数组。它向我显示了一个数组,该数组由传递的对象组成,周围有方括号

代码:

例如,我可能会传递对象:

{ schedule: 'weekend', visible: 'yes' }
console.log确认对象的格式正确。然而,重新思考将抛出错误:

'Inserted value must be an OBJECT (got ARRAY):\n["{\\n  \\"schedule\\": \\"weekend\\",\\n      \\"visible\\": \\"yes\\"\\n}"]',
Inserted value must be an OBJECT (got ARRAY):
[{
        "name": "second"
    }, {
        "name": "first"
    }]

你知道为什么我的对象会被转换成数组,以及如何阻止它发生吗?谢谢

从文档中可以看出,update需要一个对象或一个返回对象的表达式,在您的情况下,您需要传递表达式:

function(teacher) {return teacher('schedules').insertAt(0,scheduleAdd)}
insertAt也会从文档中返回修改后的数组。这意味着您的表达式返回的是计划的新数组,而不是更新的对象。结果,update在需要对象时尝试插入数组。要演示这一点,请尝试运行:

r.db('test').table('teachers').insert({schedules:[{name:"first"}]});
r.db('test').table('teachers').update(function(teacher) {return teacher('schedules').insertAt(0,{name:"second"})})
您将得到以下错误:

'Inserted value must be an OBJECT (got ARRAY):\n["{\\n  \\"schedule\\": \\"weekend\\",\\n      \\"visible\\": \\"yes\\"\\n}"]',
Inserted value must be an OBJECT (got ARRAY):
[{
        "name": "second"
    }, {
        "name": "first"
    }]
修改后的{name:second}数组正确地位于行中现有schedules数组的前面,新数组由insertAt返回。但是,update无法插入数组,因此引发错误

要解决此问题,您可以使用:

r.db('test').table('teachers').update({schedules : r.row('schedules').insertAt(0,scheduleAdd)})


谢谢-太好了。在输入其他几个对象后,如果要删除该条目,该如何处理?我知道我可以使用deleteAt,但我很难在schedules数组中计算出我要删除的元素的索引号,每个教师的索引号都会不同。@user3220303您可以使用deleteAt或difference,或任何其他函数,这实际上取决于您有哪些关于要从阵列中删除的计划的信息。如果你仍然有困难,我建议你打开一个新的问题,再多问一些细节。再次感谢。